qlcnic: Fix update of ethtool stats.
o Aggregating tx stats in adapter variable was resulting in an increase in stats even after no traffic was run and user runs ifconfig/ethtool command. o qlcnic_update_stats used to accumulate stats in adapter struct at each function call, instead accumulate tx stats in local variable and then assign it to adapter structure. Reported-by: Holger Kiehl <holger.kiehl@dwd.de> Signed-off-by: Rajesh Borundia <rajesh.borundia@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f2294eb59d
commit
a0eaf75c03
|
@ -1290,17 +1290,25 @@ static u64 *qlcnic_fill_stats(u64 *data, void *stats, int type)
|
||||||
|
|
||||||
void qlcnic_update_stats(struct qlcnic_adapter *adapter)
|
void qlcnic_update_stats(struct qlcnic_adapter *adapter)
|
||||||
{
|
{
|
||||||
|
struct qlcnic_tx_queue_stats tx_stats;
|
||||||
struct qlcnic_host_tx_ring *tx_ring;
|
struct qlcnic_host_tx_ring *tx_ring;
|
||||||
int ring;
|
int ring;
|
||||||
|
|
||||||
|
memset(&tx_stats, 0, sizeof(tx_stats));
|
||||||
for (ring = 0; ring < adapter->drv_tx_rings; ring++) {
|
for (ring = 0; ring < adapter->drv_tx_rings; ring++) {
|
||||||
tx_ring = &adapter->tx_ring[ring];
|
tx_ring = &adapter->tx_ring[ring];
|
||||||
adapter->stats.xmit_on += tx_ring->tx_stats.xmit_on;
|
tx_stats.xmit_on += tx_ring->tx_stats.xmit_on;
|
||||||
adapter->stats.xmit_off += tx_ring->tx_stats.xmit_off;
|
tx_stats.xmit_off += tx_ring->tx_stats.xmit_off;
|
||||||
adapter->stats.xmitcalled += tx_ring->tx_stats.xmit_called;
|
tx_stats.xmit_called += tx_ring->tx_stats.xmit_called;
|
||||||
adapter->stats.xmitfinished += tx_ring->tx_stats.xmit_finished;
|
tx_stats.xmit_finished += tx_ring->tx_stats.xmit_finished;
|
||||||
adapter->stats.txbytes += tx_ring->tx_stats.tx_bytes;
|
tx_stats.tx_bytes += tx_ring->tx_stats.tx_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
adapter->stats.xmit_on = tx_stats.xmit_on;
|
||||||
|
adapter->stats.xmit_off = tx_stats.xmit_off;
|
||||||
|
adapter->stats.xmitcalled = tx_stats.xmit_called;
|
||||||
|
adapter->stats.xmitfinished = tx_stats.xmit_finished;
|
||||||
|
adapter->stats.txbytes = tx_stats.tx_bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u64 *qlcnic_fill_tx_queue_stats(u64 *data, void *stats)
|
static u64 *qlcnic_fill_tx_queue_stats(u64 *data, void *stats)
|
||||||
|
|
Loading…
Reference in New Issue