patch 'net/vmxnet3: fix mapping of mempools to queues' has been queued to stable release 24.11.4

Kevin Traynor ktraynor at redhat.com
Fri Oct 31 15:32:18 CET 2025


Hi,

FYI, your patch has been queued to stable release 24.11.4

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/05/25. 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://github.com/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/bfbe8bfeaf09e502026d7b4cf596135e9c58b87c

Thanks.

Kevin

---
>From bfbe8bfeaf09e502026d7b4cf596135e9c58b87c Mon Sep 17 00:00:00 2001
From: Ronak Doshi <ronak.doshi at broadcom.com>
Date: Wed, 9 Jul 2025 21:29:03 +0000
Subject: [PATCH] net/vmxnet3: fix mapping of mempools to queues

[ upstream commit 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 ]

Index bitmask variable used was uint8_t, too small for bitmask with
9 or more queues. This patch changes it to uint16_t for now, to be
same as in the Vmxnet3_MemoryRegion structure. This way txQueues
can be lesser than rxQueues and have correct mapping of memory regions.

Also, the patch fixes memory region check as 16 queues are allowed on
both RX and TX.

Fixes: 6a113992060e ("net/vmxnet3: add cmd to register memory region")

Signed-off-by: Ronak Doshi <ronak.doshi at broadcom.com>
Acked-by: Jochen Behrens <jochen.behrens at broadcom.com>
---
 drivers/net/vmxnet3/base/vmxnet3_defs.h |  3 +++
 drivers/net/vmxnet3/vmxnet3_ethdev.c    | 23 ++++++++++++++---------
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/drivers/net/vmxnet3/base/vmxnet3_defs.h b/drivers/net/vmxnet3/base/vmxnet3_defs.h
index a6bb281d8d..15d4d88c5c 100644
--- a/drivers/net/vmxnet3/base/vmxnet3_defs.h
+++ b/drivers/net/vmxnet3/base/vmxnet3_defs.h
@@ -599,4 +599,7 @@ enum vmxnet3_intr_type {
 #define VMXNET3_MAX_INTRS      25
 
+/* Max number of queues that can request memreg, for both RX and TX. */
+#define VMXNET3_MAX_MEMREG_QUEUES  16
+
 /* Version 6 and later will use below macros */
 #define VMXNET3_EXT_MAX_TX_QUEUES  32
diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vmxnet3_ethdev.c
index 15ca25b187..e19aa43888 100644
--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c
+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c
@@ -802,6 +802,7 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
 	Vmxnet3_CmdInfo *cmdInfo;
 	struct rte_mempool *mp[VMXNET3_MAX_RX_QUEUES];
-	uint8_t index[VMXNET3_MAX_RX_QUEUES + VMXNET3_MAX_TX_QUEUES];
-	uint32_t num, i, j, size;
+	uint16_t index[VMXNET3_MAX_MEMREG_QUEUES];
+	uint16_t tx_index_mask;
+	uint32_t num, tx_num, i, j, size;
 
 	if (hw->memRegsPA == 0) {
@@ -809,5 +810,5 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
 
 		size = sizeof(Vmxnet3_MemRegs) +
-			(VMXNET3_MAX_RX_QUEUES + VMXNET3_MAX_TX_QUEUES) *
+			(2 * VMXNET3_MAX_MEMREG_QUEUES) *
 			sizeof(Vmxnet3_MemoryRegion);
 
@@ -823,5 +824,7 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
 	}
 
-	num = hw->num_rx_queues;
+	num = RTE_MIN(hw->num_rx_queues, VMXNET3_MAX_MEMREG_QUEUES);
+	tx_num = RTE_MIN(hw->num_tx_queues, VMXNET3_MAX_MEMREG_QUEUES);
+	tx_index_mask = (uint16_t)((1UL << tx_num) - 1);
 
 	for (i = 0; i < num; i++) {
@@ -858,11 +861,13 @@ vmxnet3_dev_setup_memreg(struct rte_eth_dev *dev)
 		mr->length = STAILQ_FIRST(&mp[i]->mem_list)->len <= INT32_MAX ?
 			STAILQ_FIRST(&mp[i]->mem_list)->len : INT32_MAX;
-		mr->txQueueBits = index[i];
 		mr->rxQueueBits = index[i];
+		/* tx uses same pool, but there may be fewer tx queues */
+		mr->txQueueBits = index[i] & tx_index_mask;
 
 		PMD_INIT_LOG(INFO,
 			     "index: %u startPA: %" PRIu64 " length: %u, "
-			     "rxBits: %x",
-			     j, mr->startPA, mr->length, mr->rxQueueBits);
+			     "rxBits: %x, txBits: %x",
+			     j, mr->startPA, mr->length,
+			     mr->rxQueueBits, mr->txQueueBits);
 		j++;
 	}
@@ -1088,6 +1093,6 @@ vmxnet3_dev_start(struct rte_eth_dev *dev)
 
 	/* Check memregs restrictions first */
-	if (dev->data->nb_rx_queues <= VMXNET3_MAX_RX_QUEUES &&
-	    dev->data->nb_tx_queues <= VMXNET3_MAX_TX_QUEUES) {
+	if (dev->data->nb_rx_queues <= VMXNET3_MAX_MEMREG_QUEUES &&
+	    dev->data->nb_tx_queues <= VMXNET3_MAX_MEMREG_QUEUES) {
 		ret = vmxnet3_dev_setup_memreg(dev);
 		if (ret == 0) {
-- 
2.51.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2025-10-31 13:53:52.769341733 +0000
+++ 0016-net-vmxnet3-fix-mapping-of-mempools-to-queues.patch	2025-10-31 13:53:52.024523331 +0000
@@ -1 +1 @@
-From 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 Mon Sep 17 00:00:00 2001
+From bfbe8bfeaf09e502026d7b4cf596135e9c58b87c Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 387b6e0cca4ebbb1d2f8c03da5b9d4051dfef913 ]
+
@@ -15 +16,0 @@
-Cc: stable at dpdk.org



More information about the stable mailing list