[dpdk-dev] [PATCH] net/bnxt: fix to clear cached value of stats in clear stats
Ajit Khaparde
ajit.khaparde at broadcom.com
Thu Jul 15 06:23:28 CEST 2021
On Tue, Jul 13, 2021 at 6:13 AM Kalesh A P <
kalesh-anakkur.purayil at broadcom.com> wrote:
> From: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
>
> 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 at dpdk.org
>
> Signed-off-by: Kalesh AP <kalesh-anakkur.purayil at broadcom.com>
> Reviewed-by: Ajit Khaparde <ajit.khaparde at broadcom.com>
> Reviewed-by: Lance Richardson <lance.richardson at broadcom.com>
> Reviewed-by: Somnath Kotur <somnath.kotur at broadcom.com>
>
Patch applied to dpdk-next-net-brcm.
> ---
> drivers/net/bnxt/bnxt_stats.c | 14 ++++++++++++++
> 1 file changed, 14 insertions(+)
>
> diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c
> index c7b23f4..991eafc 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;
> }
>
> --
> 2.10.1
>
>
More information about the dev
mailing list