diff options
author | david decotigny <david.decotigny@google.com> | 2011-11-16 07:15:14 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-11-16 23:14:03 -0500 |
commit | 0a1f222d24817bd57545dfb9573b5424db27d1d5 (patch) | |
tree | 51b3e86ad82097cb78be50b342aa8cc5f7cb189a /drivers/net/ethernet/nvidia | |
parent | f5d827aece36300d0fe2135d7c2232c77ee07994 (diff) |
forcedeth: account for dropped RX frames
This adds code to update the stats counter for dropped RX frames.
Signed-off-by: David Decotigny <david.decotigny@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/nvidia')
-rw-r--r-- | drivers/net/ethernet/nvidia/forcedeth.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/ethernet/nvidia/forcedeth.c b/drivers/net/ethernet/nvidia/forcedeth.c index 5d94c337dea2..b34975dca5df 100644 --- a/drivers/net/ethernet/nvidia/forcedeth.c +++ b/drivers/net/ethernet/nvidia/forcedeth.c | |||
@@ -815,6 +815,7 @@ struct fe_priv { | |||
815 | u64 stat_rx_packets; | 815 | u64 stat_rx_packets; |
816 | u64 stat_rx_bytes; /* not always available in HW */ | 816 | u64 stat_rx_bytes; /* not always available in HW */ |
817 | u64 stat_rx_missed_errors; | 817 | u64 stat_rx_missed_errors; |
818 | u64 stat_rx_dropped; | ||
818 | 819 | ||
819 | /* media detection workaround. | 820 | /* media detection workaround. |
820 | * Locking: Within irq hander or disable_irq+spin_lock(&np->lock); | 821 | * Locking: Within irq hander or disable_irq+spin_lock(&np->lock); |
@@ -1758,6 +1759,7 @@ nv_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *storage) | |||
1758 | syncp_start = u64_stats_fetch_begin(&np->swstats_rx_syncp); | 1759 | syncp_start = u64_stats_fetch_begin(&np->swstats_rx_syncp); |
1759 | storage->rx_packets = np->stat_rx_packets; | 1760 | storage->rx_packets = np->stat_rx_packets; |
1760 | storage->rx_bytes = np->stat_rx_bytes; | 1761 | storage->rx_bytes = np->stat_rx_bytes; |
1762 | storage->rx_dropped = np->stat_rx_dropped; | ||
1761 | storage->rx_missed_errors = np->stat_rx_missed_errors; | 1763 | storage->rx_missed_errors = np->stat_rx_missed_errors; |
1762 | } while (u64_stats_fetch_retry(&np->swstats_rx_syncp, syncp_start)); | 1764 | } while (u64_stats_fetch_retry(&np->swstats_rx_syncp, syncp_start)); |
1763 | 1765 | ||
@@ -1828,8 +1830,12 @@ static int nv_alloc_rx(struct net_device *dev) | |||
1828 | np->put_rx.orig = np->first_rx.orig; | 1830 | np->put_rx.orig = np->first_rx.orig; |
1829 | if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx)) | 1831 | if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx)) |
1830 | np->put_rx_ctx = np->first_rx_ctx; | 1832 | np->put_rx_ctx = np->first_rx_ctx; |
1831 | } else | 1833 | } else { |
1834 | u64_stats_update_begin(&np->swstats_rx_syncp); | ||
1835 | np->stat_rx_dropped++; | ||
1836 | u64_stats_update_end(&np->swstats_rx_syncp); | ||
1832 | return 1; | 1837 | return 1; |
1838 | } | ||
1833 | } | 1839 | } |
1834 | return 0; | 1840 | return 0; |
1835 | } | 1841 | } |
@@ -1860,8 +1866,12 @@ static int nv_alloc_rx_optimized(struct net_device *dev) | |||
1860 | np->put_rx.ex = np->first_rx.ex; | 1866 | np->put_rx.ex = np->first_rx.ex; |
1861 | if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx)) | 1867 | if (unlikely(np->put_rx_ctx++ == np->last_rx_ctx)) |
1862 | np->put_rx_ctx = np->first_rx_ctx; | 1868 | np->put_rx_ctx = np->first_rx_ctx; |
1863 | } else | 1869 | } else { |
1870 | u64_stats_update_begin(&np->swstats_rx_syncp); | ||
1871 | np->stat_rx_dropped++; | ||
1872 | u64_stats_update_end(&np->swstats_rx_syncp); | ||
1864 | return 1; | 1873 | return 1; |
1874 | } | ||
1865 | } | 1875 | } |
1866 | return 0; | 1876 | return 0; |
1867 | } | 1877 | } |