From: Kalesh AP Date: Tue, 13 Jul 2021 13:34:13 +0000 (+0530) Subject: net/bnxt: clear cached statistics X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=84fd852caac19795d0a05af8dabce8f011fe61a4;p=dpdk.git net/bnxt: clear cached statistics As part of the workaround put in the commit "219842b9990c", driver caches the last read stats values from the hardware. But this is not cleared during the clear stats operation. This results in showing up stale stats values while reading the stats after the clear operation. Fixes: 219842b9990c ("net/bnxt: workaround spurious zero stats in Thor") Cc: stable@dpdk.org Signed-off-by: Kalesh AP Reviewed-by: Ajit Khaparde Reviewed-by: Lance Richardson Reviewed-by: Somnath Kotur --- diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c index c7b23f46a1..991eafc644 100644 --- a/drivers/net/bnxt/bnxt_stats.c +++ b/drivers/net/bnxt/bnxt_stats.c @@ -603,6 +603,16 @@ int bnxt_stats_get_op(struct rte_eth_dev *eth_dev, return rc; } +static void bnxt_clear_prev_stat(struct bnxt *bp) +{ + /* + * Clear the cached values of stats returned by HW in the previous + * get operation. + */ + memset(bp->prev_rx_ring_stats, 0, sizeof(struct bnxt_ring_stats) * bp->rx_cp_nr_rings); + memset(bp->prev_tx_ring_stats, 0, sizeof(struct bnxt_ring_stats) * bp->tx_cp_nr_rings); +} + int bnxt_stats_reset_op(struct rte_eth_dev *eth_dev) { struct bnxt *bp = eth_dev->data->dev_private; @@ -625,6 +635,8 @@ int bnxt_stats_reset_op(struct rte_eth_dev *eth_dev) rte_atomic64_clear(&rxq->rx_mbuf_alloc_fail); } + bnxt_clear_prev_stat(bp); + return ret; } @@ -933,6 +945,8 @@ int bnxt_dev_xstats_reset_op(struct rte_eth_dev *eth_dev) PMD_DRV_LOG(ERR, "Failed to reset xstats: %s\n", strerror(-ret)); + bnxt_clear_prev_stat(bp); + return ret; }