#include <stdio.h>
#include <unistd.h>
-#include <rte_ethdev_driver.h>
+#include <ethdev_driver.h>
#include <rte_common.h>
#include <rte_malloc.h>
#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.
memset(&tmp, 0, sizeof(tmp));
/* Add software counters. */
for (i = 0; (i != priv->rxqs_n); ++i) {
- struct mlx5_rxq_data *rxq = (*priv->rxqs)[i];
+ struct mlx5_rxq_data *rxq = mlx5_rxq_data_get(dev, i);
if (rxq == NULL)
continue;
unsigned int i;
for (i = 0; (i != priv->rxqs_n); ++i) {
- if ((*priv->rxqs)[i] == NULL)
+ struct mlx5_rxq_data *rxq_data = mlx5_rxq_data_get(dev, i);
+
+ if (rxq_data == NULL)
continue;
- memset(&(*priv->rxqs)[i]->stats, 0,
- sizeof(struct mlx5_rxq_stats));
+ memset(&rxq_data->stats, 0, sizeof(struct mlx5_rxq_stats));
}
for (i = 0; (i != priv->txqs_n); ++i) {
if ((*priv->txqs)[i] == NULL)
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);
}
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;
}