From: Somnath Kotur Date: Fri, 12 Mar 2021 05:21:08 +0000 (+0530) Subject: net/bnxt: fix xstats get X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=eac4fc71cdaa6b68dbd0e4129e5751c712501693;p=dpdk.git 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 --- 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++) {