diff options
Diffstat (limited to 'drivers/net/ixgbe')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 53 |
1 files changed, 31 insertions, 22 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index ee5ee10c918f..6e7d90e69b52 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -2026,22 +2026,26 @@ static int ixgbe_close(struct net_device *netdev) | |||
2026 | void ixgbe_update_stats(struct ixgbe_adapter *adapter) | 2026 | void ixgbe_update_stats(struct ixgbe_adapter *adapter) |
2027 | { | 2027 | { |
2028 | struct ixgbe_hw *hw = &adapter->hw; | 2028 | struct ixgbe_hw *hw = &adapter->hw; |
2029 | u64 good_rx, missed_rx, bprc; | 2029 | u64 total_mpc = 0; |
2030 | u32 i, missed_rx = 0, mpc, bprc, lxon, lxoff, xon_off_tot; | ||
2030 | 2031 | ||
2031 | adapter->stats.crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); | 2032 | adapter->stats.crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS); |
2032 | good_rx = IXGBE_READ_REG(hw, IXGBE_GPRC); | 2033 | for (i = 0; i < 8; i++) { |
2033 | missed_rx = IXGBE_READ_REG(hw, IXGBE_MPC(0)); | 2034 | /* for packet buffers not used, the register should read 0 */ |
2034 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(1)); | 2035 | mpc = IXGBE_READ_REG(hw, IXGBE_MPC(i)); |
2035 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(2)); | 2036 | missed_rx += mpc; |
2036 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(3)); | 2037 | adapter->stats.mpc[i] += mpc; |
2037 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(4)); | 2038 | total_mpc += adapter->stats.mpc[i]; |
2038 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(5)); | 2039 | adapter->stats.rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); |
2039 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(6)); | 2040 | } |
2040 | missed_rx += IXGBE_READ_REG(hw, IXGBE_MPC(7)); | 2041 | adapter->stats.gprc += IXGBE_READ_REG(hw, IXGBE_GPRC); |
2041 | adapter->stats.gprc += (good_rx - missed_rx); | 2042 | /* work around hardware counting issue */ |
2042 | 2043 | adapter->stats.gprc -= missed_rx; | |
2043 | adapter->stats.mpc[0] += missed_rx; | 2044 | |
2045 | /* 82598 hardware only has a 32 bit counter in the high register */ | ||
2044 | adapter->stats.gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); | 2046 | adapter->stats.gorc += IXGBE_READ_REG(hw, IXGBE_GORCH); |
2047 | adapter->stats.gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); | ||
2048 | adapter->stats.tor += IXGBE_READ_REG(hw, IXGBE_TORH); | ||
2045 | bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); | 2049 | bprc = IXGBE_READ_REG(hw, IXGBE_BPRC); |
2046 | adapter->stats.bprc += bprc; | 2050 | adapter->stats.bprc += bprc; |
2047 | adapter->stats.mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); | 2051 | adapter->stats.mprc += IXGBE_READ_REG(hw, IXGBE_MPRC); |
@@ -2053,28 +2057,34 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter) | |||
2053 | adapter->stats.prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); | 2057 | adapter->stats.prc511 += IXGBE_READ_REG(hw, IXGBE_PRC511); |
2054 | adapter->stats.prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); | 2058 | adapter->stats.prc1023 += IXGBE_READ_REG(hw, IXGBE_PRC1023); |
2055 | adapter->stats.prc1522 += IXGBE_READ_REG(hw, IXGBE_PRC1522); | 2059 | adapter->stats.prc1522 += IXGBE_READ_REG(hw, IXGBE_PRC1522); |
2056 | |||
2057 | adapter->stats.rlec += IXGBE_READ_REG(hw, IXGBE_RLEC); | 2060 | adapter->stats.rlec += IXGBE_READ_REG(hw, IXGBE_RLEC); |
2058 | adapter->stats.lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); | 2061 | adapter->stats.lxonrxc += IXGBE_READ_REG(hw, IXGBE_LXONRXC); |
2059 | adapter->stats.lxontxc += IXGBE_READ_REG(hw, IXGBE_LXONTXC); | ||
2060 | adapter->stats.lxoffrxc += IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); | 2062 | adapter->stats.lxoffrxc += IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); |
2061 | adapter->stats.lxofftxc += IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); | 2063 | lxon = IXGBE_READ_REG(hw, IXGBE_LXONTXC); |
2064 | adapter->stats.lxontxc += lxon; | ||
2065 | lxoff = IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); | ||
2066 | adapter->stats.lxofftxc += lxoff; | ||
2062 | adapter->stats.ruc += IXGBE_READ_REG(hw, IXGBE_RUC); | 2067 | adapter->stats.ruc += IXGBE_READ_REG(hw, IXGBE_RUC); |
2063 | adapter->stats.gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); | 2068 | adapter->stats.gptc += IXGBE_READ_REG(hw, IXGBE_GPTC); |
2064 | adapter->stats.gotc += IXGBE_READ_REG(hw, IXGBE_GOTCH); | 2069 | adapter->stats.mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); |
2065 | adapter->stats.rnbc[0] += IXGBE_READ_REG(hw, IXGBE_RNBC(0)); | 2070 | /* |
2071 | * 82598 errata - tx of flow control packets is included in tx counters | ||
2072 | */ | ||
2073 | xon_off_tot = lxon + lxoff; | ||
2074 | adapter->stats.gptc -= xon_off_tot; | ||
2075 | adapter->stats.mptc -= xon_off_tot; | ||
2076 | adapter->stats.gotc -= (xon_off_tot * (ETH_ZLEN + ETH_FCS_LEN)); | ||
2066 | adapter->stats.ruc += IXGBE_READ_REG(hw, IXGBE_RUC); | 2077 | adapter->stats.ruc += IXGBE_READ_REG(hw, IXGBE_RUC); |
2067 | adapter->stats.rfc += IXGBE_READ_REG(hw, IXGBE_RFC); | 2078 | adapter->stats.rfc += IXGBE_READ_REG(hw, IXGBE_RFC); |
2068 | adapter->stats.rjc += IXGBE_READ_REG(hw, IXGBE_RJC); | 2079 | adapter->stats.rjc += IXGBE_READ_REG(hw, IXGBE_RJC); |
2069 | adapter->stats.tor += IXGBE_READ_REG(hw, IXGBE_TORH); | ||
2070 | adapter->stats.tpr += IXGBE_READ_REG(hw, IXGBE_TPR); | 2080 | adapter->stats.tpr += IXGBE_READ_REG(hw, IXGBE_TPR); |
2071 | adapter->stats.ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); | 2081 | adapter->stats.ptc64 += IXGBE_READ_REG(hw, IXGBE_PTC64); |
2082 | adapter->stats.ptc64 -= xon_off_tot; | ||
2072 | adapter->stats.ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); | 2083 | adapter->stats.ptc127 += IXGBE_READ_REG(hw, IXGBE_PTC127); |
2073 | adapter->stats.ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); | 2084 | adapter->stats.ptc255 += IXGBE_READ_REG(hw, IXGBE_PTC255); |
2074 | adapter->stats.ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); | 2085 | adapter->stats.ptc511 += IXGBE_READ_REG(hw, IXGBE_PTC511); |
2075 | adapter->stats.ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); | 2086 | adapter->stats.ptc1023 += IXGBE_READ_REG(hw, IXGBE_PTC1023); |
2076 | adapter->stats.ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522); | 2087 | adapter->stats.ptc1522 += IXGBE_READ_REG(hw, IXGBE_PTC1522); |
2077 | adapter->stats.mptc += IXGBE_READ_REG(hw, IXGBE_MPTC); | ||
2078 | adapter->stats.bptc += IXGBE_READ_REG(hw, IXGBE_BPTC); | 2088 | adapter->stats.bptc += IXGBE_READ_REG(hw, IXGBE_BPTC); |
2079 | 2089 | ||
2080 | /* Fill out the OS statistics structure */ | 2090 | /* Fill out the OS statistics structure */ |
@@ -2090,8 +2100,7 @@ void ixgbe_update_stats(struct ixgbe_adapter *adapter) | |||
2090 | adapter->net_stats.rx_dropped = 0; | 2100 | adapter->net_stats.rx_dropped = 0; |
2091 | adapter->net_stats.rx_length_errors = adapter->stats.rlec; | 2101 | adapter->net_stats.rx_length_errors = adapter->stats.rlec; |
2092 | adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs; | 2102 | adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs; |
2093 | adapter->net_stats.rx_missed_errors = adapter->stats.mpc[0]; | 2103 | adapter->net_stats.rx_missed_errors = total_mpc; |
2094 | |||
2095 | } | 2104 | } |
2096 | 2105 | ||
2097 | /** | 2106 | /** |