From: Harry van Haaren Date: Thu, 1 Oct 2015 12:12:51 +0000 (+0100) Subject: ixgbe: fix statistics for 82598/82599 differences X-Git-Tag: spdx-start~8310 X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=75e7eb4a011f0350bc6b6fa20c0d9f3f0eeba192;p=dpdk.git ixgbe: fix statistics for 82598/82599 differences Ixgbe based 82598 and 82599 have different priority receive link-on register addresses. This is solved in base/ by providing in the PXONRXC and PXONXCNT as separate macros. This patch ensures the correct address is read, avoiding reading garbage values. Also PXON2OFFCNT doesn't exist in 82598, so it is not read for that MAC. This issue has existed since the drivers were imported into DPDK, but was not easily discoverable as xstats were not available. Tested using testpmd> show port xstats all Fixes: af75078fece3 ("first public release") Signed-off-by: Harry van Haaren Acked-by: Wenzhuo Lu --- diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index e929f6f911..8ee9f7e5d9 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -2039,19 +2039,25 @@ ixgbe_read_stats_registers(struct ixgbe_hw *hw, struct ixgbe_hw_stats hw_stats->mpc[i] += mp; /* Running comprehensive total for stats display */ *total_missed_rx += hw_stats->mpc[i]; - if (hw->mac.type == ixgbe_mac_82598EB) + if (hw->mac.type == ixgbe_mac_82598EB) { hw_stats->rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i)); + hw_stats->pxonrxc[i] += + IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); + hw_stats->pxoffrxc[i] += + IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); + } else { + hw_stats->pxonrxc[i] += + IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i)); + hw_stats->pxoffrxc[i] += + IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i)); + hw_stats->pxon2offc[i] += + IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i)); + } hw_stats->pxontxc[i] += IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); - hw_stats->pxonrxc[i] += - IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); hw_stats->pxofftxc[i] += IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); - hw_stats->pxoffrxc[i] += - IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); - hw_stats->pxon2offc[i] += - IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i)); } for (i = 0; i < IXGBE_QUEUE_STAT_COUNTERS; i++) { hw_stats->qprc[i] += IXGBE_READ_REG(hw, IXGBE_QPRC(i));