X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_stats.c;h=ae2f5668a74d3e041145763fc85edda4dca6f501;hb=b3bc560bd6bdf3c9851d25bc0a66cb24aa1fd48c;hp=e30542e9841f8ffe8f85a40a112128ac0246c55b;hpb=3b025c0ca425a634b7eead08420fa5a5cfaa1445;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c index e30542e984..ae2f5668a7 100644 --- a/drivers/net/mlx5/mlx5_stats.c +++ b/drivers/net/mlx5/mlx5_stats.c @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include @@ -16,7 +16,9 @@ #include "mlx5_defs.h" #include "mlx5.h" -#include "mlx5_rxtx.h" +#include "mlx5_rx.h" +#include "mlx5_tx.h" +#include "mlx5_malloc.h" /** * DPDK callback to get extended device statistics. @@ -216,8 +218,7 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) 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 +229,29 @@ mlx5_xstats_reset(struct rte_eth_dev *dev) } 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; }