[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