patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Xueming Li <xuemingl@nvidia.com>
To: Bing Zhao <bingz@nvidia.com>
Cc: Viacheslav Ovsiienko <viacheslavo@nvidia.com>,
	dpdk stable <stable@dpdk.org>
Subject: patch 'net/mlx5: fix counters map in bonding mode' has been queued to stable release 23.11.1
Date: Sat, 13 Apr 2024 20:49:00 +0800	[thread overview]
Message-ID: <20240413125005.725659-60-xuemingl@nvidia.com> (raw)
In-Reply-To: <20240413125005.725659-1-xuemingl@nvidia.com>

Hi,

FYI, your patch has been queued to stable release 23.11.1

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 04/15/24. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the
patch applied to the branch. This will indicate if there was any rebasing
needed to apply to the stable branch. If there were code changes for rebasing
(ie: not only metadata diffs), please double check that the rebase was
correctly done.

Queued patches are on a temporary branch at:
https://git.dpdk.org/dpdk-stable/log/?h=23.11-staging

This queued commit can be viewed at:
https://git.dpdk.org/dpdk-stable/commit/?h=23.11-staging&id=0c31d1220ffaff4742154c3c957ab5305e5f5c3a

Thanks.

Xueming Li <xuemingl@nvidia.com>

---
From 0c31d1220ffaff4742154c3c957ab5305e5f5c3a Mon Sep 17 00:00:00 2001
From: Bing Zhao <bingz@nvidia.com>
Date: Thu, 29 Feb 2024 11:34:56 +0200
Subject: [PATCH] net/mlx5: fix counters map in bonding mode
Cc: Xueming Li <xuemingl@nvidia.com>

[ upstream commit a687c3e658c2d889052089af8340bc0b9299c856 ]

In the HW-LAG mode, there is only one mlx5 IB device with 2 ETH
interfaces. In theory, the settings on both ports should be the same.
But in the real life, some inconsistent settings may be done by the
user and the PMD is not aware of this.

In the previous implementation, the xstats map was generated from the
information fetched on the 1st port of a bonding interface. If the
2nd port had a different settings, the number and the order of the
counters may differ from that of the 1st one. The ioctl() call may
corrupt the user buffers (copy_to_user) and cause a crash.

The commit will change the map between the driver counters to the
PMD user counters.
  1. Switch the inner and outer loop to speed up the initialization
     time AMAP - since there will be >300 counters returned from the
     driver.
  2. Generate an unique map for both ports in LAG mode.
    a. Scan the 1st port and find the supported counters' strings,
       then add to the map.
    b. In bonding, scan the 2nd port and find the strings. If one is
       already in the map, use the index. Or append to the next free
       slot.
    c. Append the device counters that needs to be fetched via sysfs
       or Devx command. This kind of counter(s) is unique per IB
       device.

After querying the statistics from the driver, the value will be read
from the proper offset in the "struct ethtool_stats" and then added
into the output array based on the map information. In bonding mode,
the statistics from both ports will be accumulated if the counters
are valid on both ports.

Compared to the system call or Devx command, the overhead introduced
by the extra index comparison is light and should not cause a
significant degradation.

The application should ensure that the port settings should not be
changed out of the DPDK application dynamically in most cases. Or
else the change cannot be notified and the counters map might not
be valid when the number doesn't change but the counters set had
changed. A device restart will help to re-initialize the map from
scrath.

Fixes: 7ed15acdcd69 ("net/mlx5: improve xstats of bonding port")

Signed-off-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Viacheslav Ovsiienko <viacheslavo@nvidia.com>
---
 drivers/net/mlx5/linux/mlx5_ethdev_os.c   | 249 +++++++++++++++-------
 drivers/net/mlx5/mlx5.h                   |  15 +-
 drivers/net/mlx5/mlx5_stats.c             |  58 +++--
 drivers/net/mlx5/windows/mlx5_ethdev_os.c |  22 +-
 4 files changed, 242 insertions(+), 102 deletions(-)

diff --git a/drivers/net/mlx5/linux/mlx5_ethdev_os.c b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
index dd5a0c546d..0ee8c58ba7 100644
--- a/drivers/net/mlx5/linux/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/linux/mlx5_ethdev_os.c
@@ -1286,13 +1286,16 @@ _mlx5_os_read_dev_counters(struct rte_eth_dev *dev, int pf, uint64_t *stats)
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
 	unsigned int i;
 	struct ifreq ifr;
-	unsigned int stats_sz = xstats_ctrl->stats_n * sizeof(uint64_t);
+	unsigned int max_stats_n = RTE_MAX(xstats_ctrl->stats_n, xstats_ctrl->stats_n_2nd);
+	unsigned int stats_sz = max_stats_n * sizeof(uint64_t);
 	unsigned char et_stat_buf[sizeof(struct ethtool_stats) + stats_sz];
 	struct ethtool_stats *et_stats = (struct ethtool_stats *)et_stat_buf;
 	int ret;
+	uint16_t i_idx, o_idx;
 
 	et_stats->cmd = ETHTOOL_GSTATS;
-	et_stats->n_stats = xstats_ctrl->stats_n;
+	/* Pass the maximum value, the driver may ignore this. */
+	et_stats->n_stats = max_stats_n;
 	ifr.ifr_data = (caddr_t)et_stats;
 	if (pf >= 0)
 		ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[pf].ifname,
@@ -1305,21 +1308,34 @@ _mlx5_os_read_dev_counters(struct rte_eth_dev *dev, int pf, uint64_t *stats)
 			dev->data->port_id);
 		return ret;
 	}
-	for (i = 0; i != xstats_ctrl->mlx5_stats_n; ++i) {
-		if (xstats_ctrl->info[i].dev)
-			continue;
-		stats[i] += (uint64_t)
-			    et_stats->data[xstats_ctrl->dev_table_idx[i]];
+	if (pf <= 0) {
+		for (i = 0; i != xstats_ctrl->mlx5_stats_n; i++) {
+			i_idx = xstats_ctrl->dev_table_idx[i];
+			if (i_idx == UINT16_MAX || xstats_ctrl->info[i].dev)
+				continue;
+			o_idx = xstats_ctrl->xstats_o_idx[i];
+			stats[o_idx] += (uint64_t)et_stats->data[i_idx];
+		}
+	} else {
+		for (i = 0; i != xstats_ctrl->mlx5_stats_n; i++) {
+			i_idx = xstats_ctrl->dev_table_idx_2nd[i];
+			if (i_idx == UINT16_MAX)
+				continue;
+			o_idx = xstats_ctrl->xstats_o_idx_2nd[i];
+			stats[o_idx] += (uint64_t)et_stats->data[i_idx];
+		}
 	}
 	return 0;
 }
 
-/**
+/*
  * Read device counters.
  *
  * @param dev
  *   Pointer to Ethernet device.
- * @param[out] stats
+ * @param bond_master
+ *   Indicate if the device is a bond master.
+ * @param stats
  *   Counters table output buffer.
  *
  * @return
@@ -1327,7 +1343,7 @@ _mlx5_os_read_dev_counters(struct rte_eth_dev *dev, int pf, uint64_t *stats)
  *   rte_errno is set.
  */
 int
-mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats)
+mlx5_os_read_dev_counters(struct rte_eth_dev *dev, bool bond_master, uint64_t *stats)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
@@ -1335,7 +1351,7 @@ mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats)
 
 	memset(stats, 0, sizeof(*stats) * xstats_ctrl->mlx5_stats_n);
 	/* Read ifreq counters. */
-	if (priv->master && priv->pf_bond >= 0) {
+	if (bond_master) {
 		/* Sum xstats from bonding device member ports. */
 		for (i = 0; i < priv->sh->bond.n_port; i++) {
 			ret = _mlx5_os_read_dev_counters(dev, i, stats);
@@ -1347,13 +1363,17 @@ mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats)
 		if (ret)
 			return ret;
 	}
-	/* Read IB counters. */
-	for (i = 0; i != xstats_ctrl->mlx5_stats_n; ++i) {
+	/*
+	 * Read IB counters.
+	 * The counters are unique per IB device but not per net IF.
+	 * In bonding mode, getting the stats name only from 1 port is enough.
+	 */
+	for (i = 0; i != xstats_ctrl->mlx5_stats_n; i++) {
 		if (!xstats_ctrl->info[i].dev)
 			continue;
 		/* return last xstats counter if fail to read. */
 		if (mlx5_os_read_dev_stat(priv, xstats_ctrl->info[i].ctr_name,
-			    &stats[i]) == 0)
+					  &stats[i]) == 0)
 			xstats_ctrl->xstats[i] = stats[i];
 		else
 			stats[i] = xstats_ctrl->xstats[i];
@@ -1361,18 +1381,24 @@ mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats)
 	return ret;
 }
 
-/**
+/*
  * Query the number of statistics provided by ETHTOOL.
  *
  * @param dev
  *   Pointer to Ethernet device.
+ * @param bond_master
+ *   Indicate if the device is a bond master.
+ * @param n_stats
+ *   Pointer to number of stats to store.
+ * @param n_stats_sec
+ *   Pointer to number of stats to store for the 2nd port of the bond.
  *
  * @return
- *   Number of statistics on success, negative errno value otherwise and
- *   rte_errno is set.
+ *   0 on success, negative errno value otherwise and rte_errno is set.
  */
 int
-mlx5_os_get_stats_n(struct rte_eth_dev *dev)
+mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
+		    uint16_t *n_stats, uint16_t *n_stats_sec)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	struct ethtool_drvinfo drvinfo;
@@ -1381,18 +1407,34 @@ mlx5_os_get_stats_n(struct rte_eth_dev *dev)
 
 	drvinfo.cmd = ETHTOOL_GDRVINFO;
 	ifr.ifr_data = (caddr_t)&drvinfo;
-	if (priv->master && priv->pf_bond >= 0)
-		/* Bonding PF. */
+	/* Bonding PFs. */
+	if (bond_master) {
 		ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[0].ifname,
 					   SIOCETHTOOL, &ifr);
-	else
+		if (ret) {
+			DRV_LOG(WARNING, "bonding port %u unable to query number of"
+				" statistics for the 1st slave, %d", PORT_ID(priv), ret);
+			return ret;
+		}
+		*n_stats = drvinfo.n_stats;
+		ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[1].ifname,
+					   SIOCETHTOOL, &ifr);
+		if (ret) {
+			DRV_LOG(WARNING, "bonding port %u unable to query number of"
+				" statistics for the 2nd slave, %d", PORT_ID(priv), ret);
+			return ret;
+		}
+		*n_stats_sec = drvinfo.n_stats;
+	} else {
 		ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr);
-	if (ret) {
-		DRV_LOG(WARNING, "port %u unable to query number of statistics",
-			dev->data->port_id);
-		return ret;
+		if (ret) {
+			DRV_LOG(WARNING, "port %u unable to query number of statistics",
+				PORT_ID(priv));
+			return ret;
+		}
+		*n_stats = drvinfo.n_stats;
 	}
-	return drvinfo.n_stats;
+	return 0;
 }
 
 static const struct mlx5_counter_ctrl mlx5_counters_init[] = {
@@ -1578,6 +1620,101 @@ static const struct mlx5_counter_ctrl mlx5_counters_init[] = {
 
 static const unsigned int xstats_n = RTE_DIM(mlx5_counters_init);
 
+static int
+mlx5_os_get_stats_strings(struct rte_eth_dev *dev, bool bond_master,
+			  struct ethtool_gstrings *strings,
+			  uint32_t stats_n, uint32_t stats_n_2nd)
+{
+	struct mlx5_priv *priv = dev->data->dev_private;
+	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
+	struct ifreq ifr;
+	int ret;
+	uint32_t i, j, idx;
+
+	/* Ensure no out of bounds access before. */
+	MLX5_ASSERT(xstats_n <= MLX5_MAX_XSTATS);
+	strings->cmd = ETHTOOL_GSTRINGS;
+	strings->string_set = ETH_SS_STATS;
+	strings->len = stats_n;
+	ifr.ifr_data = (caddr_t)strings;
+	if (bond_master)
+		ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[0].ifname,
+					   SIOCETHTOOL, &ifr);
+	else
+		ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr);
+	if (ret) {
+		DRV_LOG(WARNING, "port %u unable to get statistic names with %d",
+			PORT_ID(priv), ret);
+		return ret;
+	}
+	/* Reorganize the orders to reduce the iterations. */
+	for (j = 0; j < xstats_n; j++) {
+		xstats_ctrl->dev_table_idx[j] = UINT16_MAX;
+		for (i = 0; i < stats_n; i++) {
+			const char *curr_string =
+				(const char *)&strings->data[i * ETH_GSTRING_LEN];
+
+			if (!strcmp(mlx5_counters_init[j].ctr_name, curr_string)) {
+				idx = xstats_ctrl->mlx5_stats_n++;
+				xstats_ctrl->dev_table_idx[j] = i;
+				xstats_ctrl->xstats_o_idx[j] = idx;
+				xstats_ctrl->info[idx] = mlx5_counters_init[j];
+			}
+		}
+	}
+	if (!bond_master) {
+		/* Add dev counters, unique per IB device. */
+		for (j = 0; j != xstats_n; j++) {
+			if (mlx5_counters_init[j].dev) {
+				idx = xstats_ctrl->mlx5_stats_n++;
+				xstats_ctrl->info[idx] = mlx5_counters_init[j];
+				xstats_ctrl->hw_stats[idx] = 0;
+			}
+		}
+		return 0;
+	}
+
+	strings->len = stats_n_2nd;
+	ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[1].ifname,
+				   SIOCETHTOOL, &ifr);
+	if (ret) {
+		DRV_LOG(WARNING, "port %u unable to get statistic names for 2nd slave with %d",
+			PORT_ID(priv), ret);
+		return ret;
+	}
+	/* The 2nd slave port may have a different strings set, based on the configuration. */
+	for (j = 0; j != xstats_n; j++) {
+		xstats_ctrl->dev_table_idx_2nd[j] = UINT16_MAX;
+		for (i = 0; i != stats_n_2nd; i++) {
+			const char *curr_string =
+				(const char *)&strings->data[i * ETH_GSTRING_LEN];
+
+			if (!strcmp(mlx5_counters_init[j].ctr_name, curr_string)) {
+				xstats_ctrl->dev_table_idx_2nd[j] = i;
+				if (xstats_ctrl->dev_table_idx[j] != UINT16_MAX) {
+					/* Already mapped in the 1st slave port. */
+					idx = xstats_ctrl->xstats_o_idx[j];
+					xstats_ctrl->xstats_o_idx_2nd[j] = idx;
+				} else {
+					/* Append the new items to the end of the map. */
+					idx = xstats_ctrl->mlx5_stats_n++;
+					xstats_ctrl->xstats_o_idx_2nd[j] = idx;
+					xstats_ctrl->info[idx] = mlx5_counters_init[j];
+				}
+			}
+		}
+	}
+	/* Dev counters are always at the last now. */
+	for (j = 0; j != xstats_n; j++) {
+		if (mlx5_counters_init[j].dev) {
+			idx = xstats_ctrl->mlx5_stats_n++;
+			xstats_ctrl->info[idx] = mlx5_counters_init[j];
+			xstats_ctrl->hw_stats[idx] = 0;
+		}
+	}
+	return 0;
+}
+
 /**
  * Init the structures to read device counters.
  *
@@ -1590,76 +1727,44 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
 	struct mlx5_priv *priv = dev->data->dev_private;
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
 	struct mlx5_stats_ctrl *stats_ctrl = &priv->stats_ctrl;
-	unsigned int i;
-	unsigned int j;
-	struct ifreq ifr;
 	struct ethtool_gstrings *strings = NULL;
-	unsigned int dev_stats_n;
+	uint16_t dev_stats_n = 0;
+	uint16_t dev_stats_n_2nd = 0;
+	unsigned int max_stats_n;
 	unsigned int str_sz;
 	int ret;
+	bool bond_master = (priv->master && priv->pf_bond >= 0);
 
 	/* So that it won't aggregate for each init. */
 	xstats_ctrl->mlx5_stats_n = 0;
-	ret = mlx5_os_get_stats_n(dev);
+	ret = mlx5_os_get_stats_n(dev, bond_master, &dev_stats_n, &dev_stats_n_2nd);
 	if (ret < 0) {
 		DRV_LOG(WARNING, "port %u no extended statistics available",
 			dev->data->port_id);
 		return;
 	}
-	dev_stats_n = ret;
+	max_stats_n = RTE_MAX(dev_stats_n, dev_stats_n_2nd);
 	/* Allocate memory to grab stat names and values. */
-	str_sz = dev_stats_n * ETH_GSTRING_LEN;
+	str_sz = max_stats_n * ETH_GSTRING_LEN;
 	strings = (struct ethtool_gstrings *)
 		  mlx5_malloc(0, str_sz + sizeof(struct ethtool_gstrings), 0,
 			      SOCKET_ID_ANY);
 	if (!strings) {
 		DRV_LOG(WARNING, "port %u unable to allocate memory for xstats",
-		     dev->data->port_id);
+			dev->data->port_id);
 		return;
 	}
-	strings->cmd = ETHTOOL_GSTRINGS;
-	strings->string_set = ETH_SS_STATS;
-	strings->len = dev_stats_n;
-	ifr.ifr_data = (caddr_t)strings;
-	if (priv->master && priv->pf_bond >= 0)
-		/* Bonding master. */
-		ret = mlx5_ifreq_by_ifname(priv->sh->bond.ports[0].ifname,
-					   SIOCETHTOOL, &ifr);
-	else
-		ret = mlx5_ifreq(dev, SIOCETHTOOL, &ifr);
-	if (ret) {
-		DRV_LOG(WARNING, "port %u unable to get statistic names",
+	ret = mlx5_os_get_stats_strings(dev, bond_master, strings,
+					dev_stats_n, dev_stats_n_2nd);
+	if (ret < 0) {
+		DRV_LOG(WARNING, "port %u failed to get the stats strings",
 			dev->data->port_id);
 		goto free;
 	}
-	for (i = 0; i != dev_stats_n; ++i) {
-		const char *curr_string = (const char *)
-			&strings->data[i * ETH_GSTRING_LEN];
-
-		for (j = 0; j != xstats_n; ++j) {
-			if (!strcmp(mlx5_counters_init[j].ctr_name,
-				    curr_string)) {
-				unsigned int idx = xstats_ctrl->mlx5_stats_n++;
-
-				xstats_ctrl->dev_table_idx[idx] = i;
-				xstats_ctrl->info[idx] = mlx5_counters_init[j];
-				break;
-			}
-		}
-	}
-	/* Add dev counters. */
-	MLX5_ASSERT(xstats_ctrl->mlx5_stats_n <= MLX5_MAX_XSTATS);
-	for (i = 0; i != xstats_n; ++i) {
-		if (mlx5_counters_init[i].dev) {
-			unsigned int idx = xstats_ctrl->mlx5_stats_n++;
-
-			xstats_ctrl->info[idx] = mlx5_counters_init[i];
-			xstats_ctrl->hw_stats[idx] = 0;
-		}
-	}
 	xstats_ctrl->stats_n = dev_stats_n;
+	xstats_ctrl->stats_n_2nd = dev_stats_n_2nd;
 	/* Copy to base at first time. */
-	ret = mlx5_os_read_dev_counters(dev, xstats_ctrl->base);
+	ret = mlx5_os_read_dev_counters(dev, bond_master, xstats_ctrl->base);
 	if (ret)
 		DRV_LOG(ERR, "port %u cannot read device counters: %s",
 			dev->data->port_id, strerror(rte_errno));
diff --git a/drivers/net/mlx5/mlx5.h b/drivers/net/mlx5/mlx5.h
index 263ebead7f..153374802a 100644
--- a/drivers/net/mlx5/mlx5.h
+++ b/drivers/net/mlx5/mlx5.h
@@ -263,14 +263,22 @@ struct mlx5_counter_ctrl {
 struct mlx5_xstats_ctrl {
 	/* Number of device stats. */
 	uint16_t stats_n;
+	/* Number of device stats, for the 2nd port in bond. */
+	uint16_t stats_n_2nd;
 	/* Number of device stats identified by PMD. */
-	uint16_t  mlx5_stats_n;
+	uint16_t mlx5_stats_n;
 	/* Index in the device counters table. */
 	uint16_t dev_table_idx[MLX5_MAX_XSTATS];
+	/* Index in the output table. */
+	uint16_t xstats_o_idx[MLX5_MAX_XSTATS];
 	uint64_t base[MLX5_MAX_XSTATS];
 	uint64_t xstats[MLX5_MAX_XSTATS];
 	uint64_t hw_stats[MLX5_MAX_XSTATS];
 	struct mlx5_counter_ctrl info[MLX5_MAX_XSTATS];
+	/* Index in the device counters table, for the 2nd port in bond. */
+	uint16_t dev_table_idx_2nd[MLX5_MAX_XSTATS];
+	/* Index in the output table, for the 2nd port in bond. */
+	uint16_t xstats_o_idx_2nd[MLX5_MAX_XSTATS];
 };
 
 struct mlx5_stats_ctrl {
@@ -2131,8 +2139,9 @@ int mlx5_get_module_eeprom(struct rte_eth_dev *dev,
 			   struct rte_dev_eeprom_info *info);
 int mlx5_os_read_dev_stat(struct mlx5_priv *priv,
 			  const char *ctr_name, uint64_t *stat);
-int mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats);
-int mlx5_os_get_stats_n(struct rte_eth_dev *dev);
+int mlx5_os_read_dev_counters(struct rte_eth_dev *dev, bool bond_master, uint64_t *stats);
+int mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
+			uint16_t *n_stats, uint16_t *n_stats_sec);
 void mlx5_os_stats_init(struct rte_eth_dev *dev);
 int mlx5_get_flag_dropless_rq(struct rte_eth_dev *dev);
 
diff --git a/drivers/net/mlx5/mlx5_stats.c b/drivers/net/mlx5/mlx5_stats.c
index 615e1d073d..f4ac58e2f9 100644
--- a/drivers/net/mlx5/mlx5_stats.c
+++ b/drivers/net/mlx5/mlx5_stats.c
@@ -39,24 +39,36 @@ mlx5_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats,
 		unsigned int n)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
-	unsigned int i;
-	uint64_t counters[n];
+	uint64_t counters[MLX5_MAX_XSTATS];
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
+	unsigned int i;
+	uint16_t stats_n = 0;
+	uint16_t stats_n_2nd = 0;
 	uint16_t mlx5_stats_n = xstats_ctrl->mlx5_stats_n;
+	bool bond_master = (priv->master && priv->pf_bond >= 0);
 
 	if (n >= mlx5_stats_n && stats) {
-		int stats_n;
 		int ret;
 
-		stats_n = mlx5_os_get_stats_n(dev);
-		if (stats_n < 0)
-			return stats_n;
-		if (xstats_ctrl->stats_n != stats_n)
+		ret = mlx5_os_get_stats_n(dev, bond_master, &stats_n, &stats_n_2nd);
+		if (ret < 0)
+			return ret;
+		/*
+		 * The number of statistics fetched via "ETH_SS_STATS" may vary because
+		 * of the port configuration each time. This is also true between 2
+		 * ports. There might be a case that the numbers are the same even if
+		 * configurations are different.
+		 * It is not recommended to change the configuration without using
+		 * RTE API. The port(traffic) restart may trigger another initialization
+		 * to make sure the map are correct.
+		 */
+		if (xstats_ctrl->stats_n != stats_n ||
+		    (bond_master && xstats_ctrl->stats_n_2nd != stats_n_2nd))
 			mlx5_os_stats_init(dev);
-		ret = mlx5_os_read_dev_counters(dev, counters);
-		if (ret)
+		ret = mlx5_os_read_dev_counters(dev, bond_master, counters);
+		if (ret < 0)
 			return ret;
-		for (i = 0; i != mlx5_stats_n; ++i) {
+		for (i = 0; i != mlx5_stats_n; i++) {
 			stats[i].id = i;
 			if (xstats_ctrl->info[i].dev) {
 				uint64_t wrap_n;
@@ -225,30 +237,32 @@ mlx5_xstats_reset(struct rte_eth_dev *dev)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	struct mlx5_xstats_ctrl *xstats_ctrl = &priv->xstats_ctrl;
-	int stats_n;
 	unsigned int i;
 	uint64_t *counters;
 	int ret;
+	uint16_t stats_n = 0;
+	uint16_t stats_n_2nd = 0;
+	bool bond_master = (priv->master && priv->pf_bond >= 0);
 
-	stats_n = mlx5_os_get_stats_n(dev);
-	if (stats_n < 0) {
+	ret = mlx5_os_get_stats_n(dev, bond_master, &stats_n, &stats_n_2nd);
+	if (ret < 0) {
 		DRV_LOG(ERR, "port %u cannot get stats: %s", dev->data->port_id,
-			strerror(-stats_n));
-		return stats_n;
+			strerror(-ret));
+		return ret;
 	}
-	if (xstats_ctrl->stats_n != stats_n)
+	if (xstats_ctrl->stats_n != stats_n ||
+	    (bond_master && xstats_ctrl->stats_n_2nd != stats_n_2nd))
 		mlx5_os_stats_init(dev);
-	counters =  mlx5_malloc(MLX5_MEM_SYS, sizeof(*counters) *
-			xstats_ctrl->mlx5_stats_n, 0,
-			SOCKET_ID_ANY);
+	/* Considering to use stack directly. */
+	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",
+		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);
+	ret = mlx5_os_read_dev_counters(dev, bond_master, counters);
 	if (ret) {
 		DRV_LOG(ERR, "port %u cannot read device counters: %s",
 			dev->data->port_id, strerror(rte_errno));
diff --git a/drivers/net/mlx5/windows/mlx5_ethdev_os.c b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
index a31e1b5494..49f750be68 100644
--- a/drivers/net/mlx5/windows/mlx5_ethdev_os.c
+++ b/drivers/net/mlx5/windows/mlx5_ethdev_os.c
@@ -178,20 +178,29 @@ mlx5_dev_set_flow_ctrl(struct rte_eth_dev *dev, struct rte_eth_fc_conf *fc_conf)
 	return -ENOTSUP;
 }
 
-/**
+/*
  * Query the number of statistics provided by ETHTOOL.
  *
  * @param dev
  *   Pointer to Ethernet device.
+ * @param bond_master
+ *   Indicate if the device is a bond master.
+ * @param n_stats
+ *   Pointer to number of stats to store.
+ * @param n_stats_sec
+ *   Pointer to number of stats to store for the 2nd port of the bond.
  *
  * @return
- *   Number of statistics on success, negative errno value otherwise and
- *   rte_errno is set.
+ *   0 on success, negative errno value otherwise and rte_errno is set.
  */
 int
-mlx5_os_get_stats_n(struct rte_eth_dev *dev)
+mlx5_os_get_stats_n(struct rte_eth_dev *dev, bool bond_master,
+		    uint16_t *n_stats, uint16_t *n_stats_sec)
 {
 	RTE_SET_USED(dev);
+	RTE_SET_USED(bond_master);
+	RTE_SET_USED(n_stats);
+	RTE_SET_USED(n_stats_sec);
 	return -ENOTSUP;
 }
 
@@ -221,6 +230,8 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
  *
  * @param dev
  *   Pointer to Ethernet device.
+ * @param bond_master
+ *   Indicate if the device is a bond master.
  * @param[out] stats
  *   Counters table output buffer.
  *
@@ -229,9 +240,10 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
  *   rte_errno is set.
  */
 int
-mlx5_os_read_dev_counters(struct rte_eth_dev *dev, uint64_t *stats)
+mlx5_os_read_dev_counters(struct rte_eth_dev *dev, bool bond_master, uint64_t *stats)
 {
 	RTE_SET_USED(dev);
+	RTE_SET_USED(bond_master);
 	RTE_SET_USED(stats);
 	return -ENOTSUP;
 }
-- 
2.34.1

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2024-04-13 20:43:06.901405245 +0800
+++ 0060-net-mlx5-fix-counters-map-in-bonding-mode.patch	2024-04-13 20:43:05.007753918 +0800
@@ -1 +1 @@
-From a687c3e658c2d889052089af8340bc0b9299c856 Mon Sep 17 00:00:00 2001
+From 0c31d1220ffaff4742154c3c957ab5305e5f5c3a Mon Sep 17 00:00:00 2001
@@ -4,0 +5,3 @@
+Cc: Xueming Li <xuemingl@nvidia.com>
+
+[ upstream commit a687c3e658c2d889052089af8340bc0b9299c856 ]
@@ -50 +52,0 @@
-Cc: stable@dpdk.org
@@ -62 +64 @@
-index 92c47a3b3d..eb47c284ec 100644
+index dd5a0c546d..0ee8c58ba7 100644
@@ -237 +239 @@
-@@ -1615,6 +1657,101 @@ static const struct mlx5_counter_ctrl mlx5_counters_init[] = {
+@@ -1578,6 +1620,101 @@ static const struct mlx5_counter_ctrl mlx5_counters_init[] = {
@@ -339 +341 @@
-@@ -1627,76 +1764,44 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
+@@ -1590,76 +1727,44 @@ mlx5_os_stats_init(struct rte_eth_dev *dev)
@@ -431 +433 @@
-index f11a0181b8..fb3df76cac 100644
+index 263ebead7f..153374802a 100644
@@ -458 +460 @@
-@@ -2182,8 +2190,9 @@ int mlx5_get_module_eeprom(struct rte_eth_dev *dev,
+@@ -2131,8 +2139,9 @@ int mlx5_get_module_eeprom(struct rte_eth_dev *dev,

  parent reply	other threads:[~2024-04-13 12:55 UTC|newest]

Thread overview: 263+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-05  9:45 patches have " Xueming Li
2024-03-05  9:45 ` patch 'buildtools/cmdline: fix generated code for IP addresses' has " Xueming Li
2024-03-05  9:45 ` patch 'buildtools/cmdline: fix IP address initializer' " Xueming Li
2024-03-05  9:45 ` patch 'hash: remove some dead code' " Xueming Li
2024-03-05  9:45 ` patch 'regexdev: fix logtype register' " Xueming Li
2024-03-05  9:45 ` patch 'lib: use dedicated logtypes and macros' " Xueming Li
2024-03-05  9:45 ` patch 'lib: add newline in logs' " Xueming Li
2024-03-05  9:45 ` patch 'lib: remove redundant newline from " Xueming Li
2024-03-05  9:45 ` patch 'dma/dpaa2: fix logtype register' " Xueming Li
2024-03-05  9:45 ` patch 'net/i40e: remove redundant judgment in flow parsing' " Xueming Li
2024-03-05  9:45 ` patch 'net/iavf: fix memory leak on security context error' " Xueming Li
2024-03-05  9:45 ` patch 'net/ixgbe: fix memoy leak after device init failure' " Xueming Li
2024-03-05  9:45 ` patch 'net/ice: fix link update' " Xueming Li
2024-03-05  9:45 ` patch 'net/ice: fix tunnel TSO capabilities' " Xueming Li
2024-03-05  9:45 ` patch 'net/iavf: fix no polling mode switching' " Xueming Li
2024-03-05  9:45 ` patch 'net/iavf: fix crash on VF start' " Xueming Li
2024-03-05  9:45 ` patch 'net/ice: fix memory leaks' " Xueming Li
2024-03-05  9:45 ` patch 'kernel/freebsd: fix module build on FreeBSD 14' " Xueming Li
2024-03-05  9:45 ` patch 'build: fix reasons conflict' " Xueming Li
2024-03-05  9:46 ` patch 'app/graph: fix build reason' " Xueming Li
2024-03-05  9:46 ` patch 'telemetry: fix connected clients count' " Xueming Li
2024-03-05  9:46 ` patch 'telemetry: fix empty JSON dictionaries' " Xueming Li
2024-03-05  9:46 ` patch 'gro: fix reordering of packets' " Xueming Li
2024-03-05  9:46 ` patch 'ci: update versions of actions in GHA' " Xueming Li
2024-03-05  9:46 ` patch 'eal/x86: add AMD vendor check for TSC calibration' " Xueming Li
2024-03-05 11:17   ` Tummala, Sivaprasad
2024-03-05  9:46 ` patch 'doc: remove cmdline polling mode deprecation notice' " Xueming Li
2024-03-05  9:46 ` patch 'eal: verify strdup return' " Xueming Li
2024-03-05  9:46 ` patch 'bus/dpaa: " Xueming Li
2024-03-05  9:46 ` patch 'bus/fslmc: " Xueming Li
2024-03-05  9:46 ` patch 'bus/vdev: " Xueming Li
2024-03-05  9:46 ` patch 'dma/idxd: " Xueming Li
2024-03-05  9:46 ` patch 'event/cnxk: " Xueming Li
2024-03-05  9:46 ` patch 'net/failsafe: fix memory leak in args parsing' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: verify strdup return' " Xueming Li
2024-03-05  9:46 ` patch 'app/dumpcap: " Xueming Li
2024-03-05  9:46 ` patch 'app/pdump: " Xueming Li
2024-03-05  9:46 ` patch 'app/crypto-perf: " Xueming Li
2024-03-05  9:46 ` patch 'app/dma-perf: " Xueming Li
2024-03-05  9:46 ` patch 'app/testpmd: " Xueming Li
2024-03-05  9:46 ` patch 'test: " Xueming Li
2024-03-05  9:46 ` patch 'examples/qos_sched: fix memory leak in args parsing' " Xueming Li
2024-03-05  9:46 ` patch 'examples/vhost: verify strdup return' " Xueming Li
2024-03-05  9:46 ` patch 'pipeline: fix calloc parameters' " Xueming Li
2024-03-05  9:46 ` patch 'eventdev: " Xueming Li
2024-03-05  9:46 ` patch 'dmadev: " Xueming Li
2024-03-05  9:46 ` patch 'rawdev: " Xueming Li
2024-03-05  9:46 ` patch 'common/mlx5: " Xueming Li
2024-03-05  9:46 ` patch 'net/bnx2x: " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: " Xueming Li
2024-03-05  9:46 ` patch 'net/sfc: " Xueming Li
2024-03-05  9:46 ` patch 'build: fix linker warnings about undefined symbols' " Xueming Li
2024-03-05  9:46 ` patch 'build: link static libs with whole-archive in subproject' " Xueming Li
2024-03-05  9:46 ` patch 'rcu: use atomic operation on acked token' " Xueming Li
2024-03-05  9:46 ` patch 'rcu: fix acked token in debug log' " Xueming Li
2024-03-05  9:46 ` patch 'net: fix TCP/UDP checksum with padding data' " Xueming Li
2024-03-05  9:46 ` patch 'vhost: fix virtqueue access check in datapath' " Xueming Li
2024-03-05  9:46 ` patch 'vhost: fix virtqueue access check in VDUSE setup' " Xueming Li
2024-03-05  9:46 ` patch 'vhost: fix virtqueue access check in vhost-user " Xueming Li
2024-03-05  9:46 ` patch 'net/virtio: remove duplicate queue xstats' " Xueming Li
2024-03-05  9:46 ` patch 'vhost: fix deadlock during vDPA SW live migration' " Xueming Li
2024-03-05  9:46 ` patch 'vdpa/mlx5: fix queue enable drain CQ' " Xueming Li
2024-03-05  9:46 ` patch 'vhost: fix memory leak in Virtio Tx split path' " Xueming Li
2024-03-05  9:46 ` patch 'cryptodev: remove unused extern variable' " Xueming Li
2024-03-05  9:46 ` patch 'examples/ipsec-secgw: fix width of variables' " Xueming Li
2024-03-05  9:46 ` patch 'common/cnxk: fix memory leak in CPT init' " Xueming Li
2024-03-05  9:46 ` patch 'crypto/cnxk: fix CN9K ECDH public key verification' " Xueming Li
2024-03-05  9:46 ` patch 'app/crypto-perf: fix next segment mbuf' " Xueming Li
2024-03-05  9:46 ` patch 'app/crypto-perf: fix data comparison' " Xueming Li
2024-03-05  9:46 ` patch 'app/crypto-perf: fix encrypt operation verification' " Xueming Li
2024-03-05  9:46 ` patch 'event/cnxk: fix dequeue timeout configuration' " Xueming Li
2024-03-05  9:46 ` patch 'test/event: skip test if no driver is present' " Xueming Li
2024-03-05  9:46 ` patch 'doc: fix commands in eventdev test tool guide' " Xueming Li
2024-03-05  9:46 ` patch 'ethdev: fix NVGRE encap flow action description' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for device initialization' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for CoreNIC firmware' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for PF initialization' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for flower firmware' " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for exit of CoreNIC " Xueming Li
2024-03-05  9:46 ` patch 'net/nfp: fix resource leak for exit of flower " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix resource leak for VF' " Xueming Li
2024-03-05  9:47 ` patch 'net/af_xdp: fix memzone leak on config failure' " Xueming Li
2024-03-05  9:47 ` patch 'net/memif: fix crash with Tx burst larger than 255' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: refactor VF mailbox message struct' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: refactor PF " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: refactor send mailbox function' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: refactor handle " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: fix VF multiple count on one reset' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: fix disable command with firmware' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: fix reset level comparison' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix Rx memory leak' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix Rx descriptor' " Xueming Li
2024-03-05  9:47 ` patch 'net/hns3: remove QinQ insert support for VF' " Xueming Li
2024-03-05  9:47 ` patch 'doc: add --latencystats option in testpmd guide' " Xueming Li
2024-03-05  9:47 ` patch 'app/testpmd: hide --bitrate-stats in help if disabled' " Xueming Li
2024-03-05  9:47 ` patch 'net/vmxnet3: fix initialization on FreeBSD' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix device close' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix device resource freeing' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: free switch domain ID on close' " Xueming Li
2024-03-05  9:47 ` patch 'net/mana: prevent values overflow returned from RDMA layer' " Xueming Li
2024-03-05  9:47 ` patch 'drivers/net: fix buffer overflow for packet types list' " Xueming Li
2024-03-05  9:47 ` patch 'app/testpmd: fix crash in multi-process forwarding' " Xueming Li
2024-03-05  9:47 ` patch 'net/ionic: fix missing volatile type for cqe pointers' " Xueming Li
2024-03-05  9:47 ` patch 'net/ionic: fix RSS query' " Xueming Li
2024-03-05  9:47 ` patch 'net/ionic: fix device close' " Xueming Li
2024-03-05  9:47 ` patch 'net/bonding: fix flow count query' " Xueming Li
2024-03-05  9:47 ` patch 'net/mana: fix memory leak on MR allocation' " Xueming Li
2024-03-05  9:47 ` patch 'net/mana: handle MR cache expansion failure' " Xueming Li
2024-03-05  9:47 ` patch 'common/sfc_efx/base: use C11 static assert' " Xueming Li
2024-03-05  9:47 ` patch 'net/memif: fix extra mbuf refcnt update in zero copy Tx' " Xueming Li
2024-03-05  9:47 ` patch 'net/softnic: fix include of log library' " Xueming Li
2024-03-05  9:47 ` patch 'net/gve: fix DQO for chained descriptors' " Xueming Li
2024-03-05  9:47 ` patch 'net: add macros for VLAN metadata parsing' " Xueming Li
2024-03-05  9:47 ` patch 'net/netvsc: fix " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: fix array overflow' " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: fix 50G and 100G forced speed' " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: fix speed change from 200G to 25G on Thor' " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: fix backward firmware compatibility' " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: modify locking for representor Tx' " Xueming Li
2024-03-05  9:47 ` patch 'net/bnxt: fix deadlock in ULP timer callback' " Xueming Li
2024-03-05  9:47 ` patch 'ml/cnxk: fix xstats calculation' " Xueming Li
2024-03-05  9:47 ` patch 'net/cnxk: fix flow RSS configuration' " Xueming Li
2024-03-05  9:47 ` patch 'net/thunderx: fix DMAC control register update' " Xueming Li
2024-03-05  9:47 ` patch 'common/cnxk: fix mbox region copy' " Xueming Li
2024-03-05  9:47 ` patch 'common/cnxk: fix VLAN check for inner header' " Xueming Li
2024-03-05  9:47 ` patch 'net/cnxk: fix aged flow query' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: fix jump action validation' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: fix flow tag modification' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5/hws: fix ESP flow matching validation' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: fix GENEVE TLV option management' " Xueming Li
2024-03-05  9:47 ` patch 'common/mlx5: fix duplicate read of general capabilities' " Xueming Li
2024-03-05  9:47 ` patch 'common/mlx5: fix query sample info capability' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: remove GENEVE options length limitation' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: fix GENEVE option item translation' " Xueming Li
2024-03-05  9:47 ` patch 'net/mlx5: fix stats query crash in secondary process' " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix NFD3 metadata " Xueming Li
2024-03-05  9:47 ` patch 'net/nfp: fix NFDk " Xueming Li
2024-03-05  9:47 ` patch 'app/testpmd: fix GRO packets flush on timeout' " Xueming Li
2024-04-13 12:48 ` patch " Xueming Li
2024-04-13 12:48   ` patch 'doc: fix configuration in baseband 5GNR driver guide' " Xueming Li
2024-04-13 12:48   ` patch 'event/dlb2: remove superfluous memcpy' " Xueming Li
2024-04-13 12:48   ` patch 'test/event: fix crash in Tx adapter freeing' " Xueming Li
2024-04-13 12:48   ` patch 'eventdev: improve Doxygen comments on configure struct' " Xueming Li
2024-04-13 12:48   ` patch 'eventdev: fix Doxygen processing of vector " Xueming Li
2024-04-13 12:48   ` patch 'eventdev/crypto: fix enqueueing' " Xueming Li
2024-04-13 12:48   ` patch 'app/crypto-perf: fix copy segment size' " Xueming Li
2024-04-13 12:48   ` patch 'app/crypto-perf: fix out-of-place mbuf " Xueming Li
2024-04-13 12:48   ` patch 'app/crypto-perf: add missing op resubmission' " Xueming Li
2024-04-13 12:48   ` patch 'doc: fix typos in cryptodev overview' " Xueming Li
2024-04-13 12:48   ` patch 'common/qat: fix legacy flag' " Xueming Li
2024-04-13 12:48   ` patch 'vhost: fix VDUSE device destruction failure' " Xueming Li
2024-04-13 12:48   ` patch 'net/af_xdp: fix leak on XSK configuration " Xueming Li
2024-04-13 12:48   ` patch 'app/testpmd: fix flow modify tag typo' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix modify flex item' " Xueming Li
2024-04-13 12:48   ` patch 'app/testpmd: return if no packets in GRO heavy weight mode' " Xueming Li
2024-04-13 12:48   ` patch 'app/testpmd: fix async flow create failure handling' " Xueming Li
2024-04-13 12:48   ` patch 'net/tap: do not overwrite flow API errors' " Xueming Li
2024-04-13 12:48   ` patch 'net/tap: fix traffic control handle calculation' " Xueming Li
2024-04-13 12:48   ` patch 'net/bnxt: fix null pointer dereference' " Xueming Li
2024-04-13 12:48   ` patch 'net/ixgbevf: fix RSS init for x550 NICs' " Xueming Li
2024-04-13 12:48   ` patch 'net/iavf: remove error logs for VLAN offloading' " Xueming Li
2024-04-13 12:48   ` patch 'net/ixgbe: increase VF reset timeout' " Xueming Li
2024-04-13 12:48   ` patch 'net/i40e: remove incorrect 16B descriptor read block' " Xueming Li
2024-04-13 12:48   ` patch 'net/iavf: " Xueming Li
2024-04-13 12:48   ` patch 'net/ice: " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix inline device pointer check' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: fix Rx packet format check condition' " Xueming Li
2024-04-13 12:48   ` patch 'net/bnx2x: fix warnings about memcpy lengths' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: remove CN9K inline IPsec FP opcodes' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: fix buffer size configuration' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix Tx MTU " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: fix MTU limit' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix RSS RETA configuration' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: fix indirect mbuf handling in Tx' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: add cookies check for multi-segment offload' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix mbox struct attributes' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: fix mbuf fields in multi-segment Tx' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix link config for SDP' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: remove dead code' " Xueming Li
2024-04-13 12:48   ` patch 'common/cnxk: fix possible out-of-bounds access' " Xueming Li
2024-04-13 12:48   ` patch 'net/cnxk: improve Tx performance for SW mbuf free' " Xueming Li
2024-04-13 12:48   ` patch 'doc: fix aging poll frequency option in cnxk guide' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5/hws: skip item when inserting rules by index' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5/hws: check not supported fields in VXLAN' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5/hws: fix VLAN item in non-relaxed mode' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix use after free when releasing Tx queues' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix error packets drop in regular Rx' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: prevent querying aged flows on uninit port' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5/hws: fix VLAN inner type' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix condition of LACP miss flow' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix conntrack action handle representation' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix connection tracking action validation' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix HWS registers initialization' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5/hws: enable multiple integrity items' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix VLAN handling in meter split' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix parameters verification in HWS table create' " Xueming Li
2024-04-13 12:48   ` patch 'net/mlx5: fix flow counter cache starvation' " Xueming Li
2024-04-13 12:49   ` Xueming Li [this message]
2024-04-13 12:49   ` patch 'net/mlx5: fix flow action template expansion' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: remove device status check in flow creation' " Xueming Li
2024-04-13 12:49   ` patch 'test: fix probing in secondary process' " Xueming Li
2024-04-13 12:49   ` patch 'bus/vdev: fix devargs " Xueming Li
2024-04-13 12:49   ` patch 'config: fix CPU instruction set for cross-build' " Xueming Li
2024-04-13 12:49   ` patch 'test/mbuf: fix external mbuf case with assert enabled' " Xueming Li
2024-04-13 12:49   ` patch 'test: assume C source files are UTF-8 encoded' " Xueming Li
2024-04-13 12:49   ` patch 'test: do not count skipped tests as executed' " Xueming Li
2024-04-13 12:49   ` patch 'examples/packet_ordering: fix Rx with reorder mode disabled' " Xueming Li
2024-04-13 12:49   ` patch 'examples/l3fwd: fix Rx over not ready port' " Xueming Li
2024-04-13 12:49   ` patch 'dts: fix smoke tests driver regex' " Xueming Li
2024-04-13 12:49   ` patch 'examples/l3fwd: fix Rx queue configuration' " Xueming Li
2024-04-13 12:49   ` patch 'net/virtio: fix vDPA device init advertising control queue' " Xueming Li
2024-04-13 12:49   ` patch 'build: pass cflags in subproject' " Xueming Li
2024-04-13 12:49   ` patch 'examples/ipsec-secgw: fix cryptodev to SA mapping' " Xueming Li
2024-04-13 12:49   ` patch 'crypto/qat: fix crash with CCM null AAD pointer' " Xueming Li
2024-04-13 12:49   ` patch 'net/hns3: enable PFC for all user priorities' " Xueming Li
2024-04-13 12:49   ` patch 'doc: add traffic manager in features table' " Xueming Li
2024-04-13 12:49   ` patch 'app/testpmd: fix async indirect action list creation' " Xueming Li
2024-04-13 12:49   ` patch 'doc: add link speeds configuration in features table' " Xueming Li
2024-04-13 12:49   ` patch 'net/nfp: fix getting firmware VNIC version' " Xueming Li
2024-04-13 12:49   ` patch 'net/nfp: fix IPsec data endianness' " Xueming Li
2024-04-13 12:49   ` patch 'net/ena: fix fast mbuf free' " Xueming Li
2024-04-13 12:49   ` patch 'net/ena/base: limit exponential backoff' " Xueming Li
2024-04-13 12:49   ` patch 'net/ena/base: restructure interrupt handling' " Xueming Li
2024-04-13 12:49   ` patch 'net/nfp: fix switch domain free check' " Xueming Li
2024-04-13 12:49   ` patch 'net/nfp: fix initialization failure flow' " Xueming Li
2024-04-13 12:49   ` patch 'app/testpmd: fix --stats-period option check' " Xueming Li
2024-04-13 12:49   ` patch 'app/testpmd: fix burst option parsing' " Xueming Li
2024-04-13 12:49   ` patch 'app/testpmd: fix error message for invalid option' " Xueming Li
2024-04-13 12:49   ` patch 'net/hns3: support new device' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix HWS meter actions availability' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix sync meter processing in HWS' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix indirect action async job initialization' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix non-masked indirect list meter translation' " Xueming Li
2024-04-13 12:49   ` patch 'doc: update link to Windows DevX in mlx5 guide' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix VLAN ID in flow modify' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix meter policy priority' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: remove duplication of L3 flow item validation' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix IP-in-IP tunnels recognition' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix DR context release ordering' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5/hws: fix direct index insert on depend WQE' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix template clean up of FDB control flow rule' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix flow configure validation' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: prevent ioctl failure log flooding' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix age position in hairpin split' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix drop action release timing' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix warning about copy length' " Xueming Li
2024-04-13 12:49   ` patch 'net/bnxt: fix number of Tx queues being created' " Xueming Li
2024-04-13 12:49   ` patch 'examples/ipsec-secgw: fix Rx queue ID in Rx callback' " Xueming Li
2024-04-13 12:49   ` patch 'doc: fix default IP fragments maximum in programmer guide' " Xueming Li
2024-04-13 12:49   ` patch 'net/nfp: fix uninitialized variable' " Xueming Li
2024-04-13 12:49   ` patch 'app/testpmd: fix auto-completion for indirect action list' " Xueming Li
2024-04-13 12:49   ` patch 'net/ena: fix mbuf double free in fast free mode' " Xueming Li
2024-04-13 12:49   ` patch 'net/vmxnet3: ignore Rx queue interrupt setup on FreeBSD' " Xueming Li
2024-04-13 12:49   ` patch 'net/igc: fix timesync disable' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5/hws: fix memory access in L3 decapsulation' " Xueming Li
2024-04-13 12:49   ` patch 'net/mlx5: fix sync flow meter action' " Xueming Li
2024-04-13 12:49   ` patch 'doc: fix typo in profiling guide' " Xueming Li
2024-04-13 12:50   ` patch 'doc: fix typo in packet framework " Xueming Li
2024-04-13 12:50   ` patch 'test/power: fix typo in error message' " Xueming Li
2024-04-13 12:50   ` patch 'test/cfgfile: fix typo in error messages' " Xueming Li
2024-04-13 12:50   ` patch 'examples/ipsec-secgw: fix typo in error message' " Xueming Li
2024-04-13 12:50   ` patch 'dts: strip whitespaces from stdout and stderr' " Xueming Li
2024-04-13 12:50   ` patch 'net/ena/base: fix metrics excessive memory consumption' " Xueming Li

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240413125005.725659-60-xuemingl@nvidia.com \
    --to=xuemingl@nvidia.com \
    --cc=bingz@nvidia.com \
    --cc=stable@dpdk.org \
    --cc=viacheslavo@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).