From patchwork Mon Oct 19 06:36:50 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shiri Kuzin X-Patchwork-Id: 81282 X-Patchwork-Delegate: rasland@nvidia.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 603E3A04DC; Mon, 19 Oct 2020 08:37:01 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 29C511DBF; Mon, 19 Oct 2020 08:37:00 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id E1C1C23A for ; Mon, 19 Oct 2020 08:36:57 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from shirik@nvidia.com) with SMTP; 19 Oct 2020 09:36:52 +0300 Received: from nvidia.com (nps-server-12.mtl.labs.mlnx [10.7.12.72]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 09J6aqOd015994; Mon, 19 Oct 2020 09:36:52 +0300 From: Shiri Kuzin To: dev@dpdk.org Cc: matan@mellanox.com, rasland@mellanox.com, viacheslavo@mellanox.com, stable@dpdk.org Date: Mon, 19 Oct 2020 09:36:50 +0300 Message-Id: <1603089410-11248-1-git-send-email-shirik@nvidia.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-dev] [PATCH] net/mlx5: fix xstats reset reinitialization X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The mlx5_xstats_reset clears the device extended statistics. In this function the driver may reinitialize the structures that are used to read device counters. In case of reinitialization, the number of counters may change, which wouldn't be taken into account by the reset API callback and can cause a segmentation fault. This issue is fixed by allocating the counters size after the reinitialization. Fixes: a4193ae3bc4f ("net/mlx5: support extended statistics") Cc: stable@dpdk.org Signed-off-by: Shiri Kuzin Acked-by: Matan Azrad Reported-by: Ralf Hoffmann --- drivers/net/mlx5/mlx5_stats.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index e30542e..82d4d4a 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -17,6 +17,7 @@ #include "mlx5_defs.h" #include "mlx5.h" #include "mlx5_rxtx.h" +#include "mlx5_malloc.h" /** * DPDK callback to get extended device statistics. @@ -216,8 +217,7 @@ struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl; int stats_n; unsigned int i; - unsigned int n = xstats_ctrl->mlx5_stats_n; - uint64_t counters[n]; + uint64_t *counters; int ret; stats_n = mlx5_os_get_stats_n(dev); @@ -228,17 +228,29 @@ } if (xstats_ctrl->stats_n != stats_n) mlx5_os_stats_init(dev); + counters = mlx5_malloc(MLX5_MEM_SYS, sizeof(*counters) * + xstats_ctrl->mlx5_stats_n, 0, + SOCKET_ID_ANY); + if (!counters) { + DRV_LOG(WARNING, "port %u unable to allocate memory for xstats " + "counters", + dev->data->port_id); + rte_errno = ENOMEM; + return -rte_errno; + } ret = mlx5_os_read_dev_counters(dev, counters); if (ret) { DRV_LOG(ERR, "port %u cannot read device counters: %s", dev->data->port_id, strerror(rte_errno)); + mlx5_free(counters); return ret; } - for (i = 0; i != n; ++i) { + for (i = 0; i != xstats_ctrl->mlx5_stats_n; ++i) { xstats_ctrl->base[i] = counters[i]; xstats_ctrl->hw_stats[i] = 0; } mlx5_txpp_xstats_reset(dev); + mlx5_free(counters); return 0; }