From eac4fc71cdaa6b68dbd0e4129e5751c712501693 Mon Sep 17 00:00:00 2001 From: Somnath Kotur Date: Fri, 12 Mar 2021 10:51:08 +0530 Subject: [PATCH] net/bnxt: fix xstats get Fix to return count in xstats get op in all cases. Driver was returning 0 if the 'xstats' parameter being passed to xstats_get_op was NULL. This won't work on some applications that rely on a valid count being passed even in this case so that it can allocate memory accordingly followed by a reissue of the xstats_get_op to get the actual stats populated by the driver. Fixes: 063e59ddd28e ("net/bnxt: fix crash in xstats get") Cc: stable@dpdk.org Reviewed-by: Kalesh AP Reviewed-by: Lance Richardson Reviewed-by: Ajit Khaparde Signed-off-by: Somnath Kotur --- drivers/net/bnxt/bnxt_stats.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/drivers/net/bnxt/bnxt_stats.c b/drivers/net/bnxt/bnxt_stats.c index 01d90dee8d..bb4b2eee19 100644 --- a/drivers/net/bnxt/bnxt_stats.c +++ b/drivers/net/bnxt/bnxt_stats.c @@ -594,10 +594,15 @@ int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev, if (rc) return rc; - if (xstats == NULL) - return 0; + stat_count = RTE_DIM(bnxt_rx_stats_strings) + + RTE_DIM(bnxt_tx_stats_strings) + + RTE_DIM(bnxt_func_stats_strings) + + RTE_DIM(bnxt_rx_ext_stats_strings) + + RTE_DIM(bnxt_tx_ext_stats_strings) + + bnxt_flow_stats_cnt(bp); - memset(xstats, 0, sizeof(*xstats)); + if (n < stat_count || xstats == NULL) + return stat_count; bnxt_hwrm_func_qstats(bp, 0xffff, NULL, &func_qstats); bnxt_hwrm_port_qstats(bp); @@ -609,17 +614,7 @@ int bnxt_dev_xstats_get_op(struct rte_eth_dev *eth_dev, (bp->fw_tx_port_stats_ext_size / stat_size)); - count = RTE_DIM(bnxt_rx_stats_strings) + - RTE_DIM(bnxt_tx_stats_strings) + - RTE_DIM(bnxt_func_stats_strings) + - RTE_DIM(bnxt_rx_ext_stats_strings) + - RTE_DIM(bnxt_tx_ext_stats_strings) + - bnxt_flow_stats_cnt(bp); - - stat_count = count; - - if (n < count) - return count; + memset(xstats, 0, sizeof(*xstats)); count = 0; for (i = 0; i < RTE_DIM(bnxt_rx_stats_strings); i++) { -- 2.20.1