Skip to content

Commit 0bdfea8

Browse files
Mandeep Bainesdavem330
authored andcommitted
forcedeth: Improve stats counters
Rx byte count was off; instead use the hardware's count. Tx packet count was counting pre-TSO packets; instead count on-the-wire packets. Report hardware dropped frame count as rx_fifo_errors. - The count of transmitted packets reported by the forcedeth driver reports pre-TSO (TCP Segmentation Offload) packet counts and not the count of the number of packets sent on the wire. This change fixes the forcedeth driver to report the correct count. Fixed the code by copying the count stored in the NIC H/W to the value reported by the driver. - Count rx_drop_frame errors as rx_fifo_errors: We see a lot of rx_drop_frame errors if we disable the rx bottom-halves for too long. Normally, rx_fifo_errors would be counted in this case. The rx_drop_frame error count is private to forcedeth and is not reported by ifconfig or sysfs. The rx_fifo_errors count is currently unused in the forcedeth driver. It is reported by ifconfig as overruns. This change reports rx_drop_frame errors as rx_fifo_errors. Signed-off-by: David Decotigny <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 4687f3f commit 0bdfea8

File tree

1 file changed

+4
-0
lines changed

1 file changed

+4
-0
lines changed

drivers/net/ethernet/nvidia/forcedeth.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1682,6 +1682,7 @@ static void nv_get_hw_stats(struct net_device *dev)
16821682
np->estats.tx_pause += readl(base + NvRegTxPause);
16831683
np->estats.rx_pause += readl(base + NvRegRxPause);
16841684
np->estats.rx_drop_frame += readl(base + NvRegRxDropFrame);
1685+
np->estats.rx_errors_total += np->estats.rx_drop_frame;
16851686
}
16861687

16871688
if (np->driver_data & DEV_HAS_STATISTICS_V3) {
@@ -1706,11 +1707,14 @@ static struct net_device_stats *nv_get_stats(struct net_device *dev)
17061707
nv_get_hw_stats(dev);
17071708

17081709
/* copy to net_device stats */
1710+
dev->stats.tx_packets = np->estats.tx_packets;
1711+
dev->stats.rx_bytes = np->estats.rx_bytes;
17091712
dev->stats.tx_bytes = np->estats.tx_bytes;
17101713
dev->stats.tx_fifo_errors = np->estats.tx_fifo_errors;
17111714
dev->stats.tx_carrier_errors = np->estats.tx_carrier_errors;
17121715
dev->stats.rx_crc_errors = np->estats.rx_crc_errors;
17131716
dev->stats.rx_over_errors = np->estats.rx_over_errors;
1717+
dev->stats.rx_fifo_errors = np->estats.rx_drop_frame;
17141718
dev->stats.rx_errors = np->estats.rx_errors_total;
17151719
dev->stats.tx_errors = np->estats.tx_errors_total;
17161720
}

0 commit comments

Comments
 (0)