* [PATCH] app/testpmd: fix multi-pool Rx setup with --no-NUMA
@ 2026-07-02 13:07 Maayan Kashani
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
0 siblings, 1 reply; 6+ messages in thread
From: Maayan Kashani @ 2026-07-02 13:07 UTC (permalink / raw)
To: dev; +Cc: mkashani, rasland, stable, Aman Singh, Thomas Monjalon,
Gregory Etelson
When NUMA is disabled, mbuf pools are allocated on SOCKET_ID_ANY,
but rx_queue_setup() looked them up using port->socket_id. Per-segment
pool lookup failed and all segments fell back to the first pool,
causing Rx queue setup to fail when a later segment needed a larger
mbuf (e.g. --mbuf-size=314,978 --rxpkts=186,978).
Check numa_support inside mbuf_pool_find() and drop the duplicate
NUMA socket remapping from start_port().
Fixes: 0be0ad196b52 ("app/testpmd: support selective Rx")
Cc: stable@dpdk.org
Signed-off-by: Maayan Kashani <mkashani@nvidia.com>
---
app/test-pmd/testpmd.c | 3 +--
app/test-pmd/testpmd.h | 3 +++
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index fcd8a909670..9a85657840a 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -3153,8 +3153,7 @@ start_port(portid_t pid)
} else {
struct rte_mempool *mp =
mbuf_pool_find_first
- ((numa_support ? port->socket_id :
- (unsigned int)SOCKET_ID_ANY));
+ (port->socket_id);
if (mp == NULL) {
fprintf(stderr,
"Failed to setup RX queue: No mempool allocation on the socket %d\n",
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 3d4b36d6683..c1f3650f484 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -891,6 +891,9 @@ mbuf_pool_find(unsigned int sock_id, uint16_t idx)
{
char pool_name[RTE_MEMPOOL_NAMESIZE];
+ if (!numa_support)
+ sock_id = (unsigned int)SOCKET_ID_ANY;
+
mbuf_poolname_build(sock_id, pool_name, sizeof(pool_name), idx);
return rte_mempool_lookup((const char *)pool_name);
}
--
2.21.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled
2026-07-02 13:07 [PATCH] app/testpmd: fix multi-pool Rx setup with --no-NUMA Maayan Kashani
@ 2026-07-02 16:10 ` Stephen Hemminger
2026-07-02 16:10 ` [PATCH 1/4] app/testpmd: fix port socket ID " Stephen Hemminger
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger
Alternative to the patch "app/testpmd: fix multi-pool Rx setup with --no-NUMA"
from Maayan Kashani, fixing the problem at the source
rather than remapping inside mbuf_pool_find().
Since commit 835fd4893a31 ("app/testpmd: support cross-NUMA allocations"),
mbuf pools are created (and named) on SOCKET_ID_ANY
when NUMA support is disabled, but port->socket_id still holds 0/--socket-num.
Every name-based pool lookup that does not go through the single workaround in
start_port() misses. The reported multi-pool Rx failure is one instance; plain
"testpmd --no-numa --forward-mode=txonly" also crashes with a NULL
mempool dereference, and --socket-num no longer affects pool allocation.
Patch 1 restores the invariant that port->socket_id equals the
socket id the pools are created and named with, and removes the
start_port() workaround. It should go to stable (the regression
shipped in 25.07 and 25.11); it cherry-picks onto 25.11 with
trivial context conflicts and was build- and run-tested there.
Patch 2 consolidates the three diverging copies of the port socket
id policy into one helper; this also fixes hot-attached ports
ignoring --port-numa-config, --no-numa and --socket-num.
Patch 3 prints SOCKET_ID_ANY as "any" instead of 4294967295.
Patch 4 adds the error string to the interactive queue setup
command failure message; rte_eth_rx/tx_queue_setup() can return
-EBUSY silently when the port is started and the PMD lacks
runtime queue setup support.
Stephen Hemminger (4):
app/testpmd: fix port socket ID with NUMA disabled
app/testpmd: consolidate port socket ID computation
app/testpmd: display any socket ID as text
app/testpmd: report reason when queue setup command fails
app/test-pmd/cmdline.c | 12 +++--
app/test-pmd/config.c | 18 ++++---
app/test-pmd/testpmd.c | 120 +++++++++++++++++++++--------------------
app/test-pmd/testpmd.h | 11 ++++
4 files changed, 92 insertions(+), 69 deletions(-)
--
2.53.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/4] app/testpmd: fix port socket ID with NUMA disabled
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
@ 2026-07-02 16:10 ` Stephen Hemminger
2026-07-02 16:10 ` [PATCH 2/4] app/testpmd: consolidate port socket ID computation Stephen Hemminger
` (2 subsequent siblings)
3 siblings, 0 replies; 6+ messages in thread
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, stable, Maayan Kashani, Aman Singh
When NUMA support is disabled, mbuf pools are created on
SOCKET_ID_ANY but port->socket_id is still set to 0 (or
--socket-num). Pool lookup is by name, and the name embeds the
socket id the pool was created with, so every lookup that does not
go through the one workaround in start_port() misses:
- the per-lcore pool assignment in init_config() leaves
fwd_lcores[]->mbp NULL, so "testpmd --no-numa
--forward-mode=txonly" crashes with a NULL dereference in
pkt_burst_transmit();
- the per-segment and multi-mempool lookups in rx_queue_setup()
fall back to the first pool, so buffer split fails when a later
segment needs a larger mbuf
(e.g. --mbuf-size=314,978 --rxpkts=186,978);
- the interactive "port <id> rxq|txq <id> setup" command cannot
find a pool.
The --socket-num option is also ignored for pool allocation since
the offending commit.
Fix this at the source instead of adding another workaround at a
lookup site: make port->socket_id hold the same socket id the
pools are created and named with. Add uma_socket_id() returning
the pool socket key used when NUMA support is disabled
(--socket-num if given, otherwise SOCKET_ID_ANY) and use it for
pool creation, port->socket_id and the per-lcore pool fallback.
The workaround in start_port() is then unnecessary.
Passing SOCKET_ID_ANY to rte_eth_rx/tx_queue_setup() is allowed by
the ethdev API and matches the cross-NUMA intent of the offending
commit.
Fixes: 835fd4893a31 ("app/testpmd: support cross-NUMA allocations")
Cc: stable@dpdk.org
Reported-by: Maayan Kashani <mkashani@nvidia.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/testpmd.c | 27 +++++++++++++++++----------
1 file changed, 17 insertions(+), 10 deletions(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index fcd8a90967..b5dca03047 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1729,6 +1729,17 @@ init_config_port_offloads(portid_t pid, uint32_t socket_id)
}
}
+/*
+ * Socket id that mbuf pools are created (and named) with when NUMA
+ * support is disabled: --socket-num if given, otherwise SOCKET_ID_ANY.
+ */
+static unsigned int
+uma_socket_id(void)
+{
+ return socket_num == UMA_NO_CONFIG ?
+ (unsigned int)SOCKET_ID_ANY : socket_num;
+}
+
static void
init_config(void)
{
@@ -1778,8 +1789,7 @@ init_config(void)
socket_id = socket_ids[0];
}
} else {
- socket_id = (socket_num == UMA_NO_CONFIG) ?
- 0 : socket_num;
+ socket_id = uma_socket_id();
}
/* Apply default TxRx configuration for all ports */
init_config_port_offloads(pid, socket_id);
@@ -1823,7 +1833,7 @@ init_config(void)
mempools[i] = mbuf_pool_create
(mbuf_data_size[i],
nb_mbuf_per_pool,
- SOCKET_ID_ANY, i);
+ uma_socket_id(), i);
}
}
@@ -1841,7 +1851,8 @@ init_config(void)
rte_lcore_to_socket_id(fwd_lcores_cpuids[lc_id]));
if (mbp == NULL)
- mbp = mbuf_pool_find_first(0);
+ mbp = mbuf_pool_find_first(numa_support ?
+ 0 : uma_socket_id());
fwd_lcores[lc_id]->mbp = mbp;
#ifdef RTE_LIB_GSO
/* initialize GSO context */
@@ -1920,10 +1931,7 @@ init_fwd_streams(void)
}
}
else {
- if (socket_num == UMA_NO_CONFIG)
- port->socket_id = 0;
- else
- port->socket_id = socket_num;
+ port->socket_id = uma_socket_id();
}
}
@@ -3153,8 +3161,7 @@ start_port(portid_t pid)
} else {
struct rte_mempool *mp =
mbuf_pool_find_first
- ((numa_support ? port->socket_id :
- (unsigned int)SOCKET_ID_ANY));
+ (port->socket_id);
if (mp == NULL) {
fprintf(stderr,
"Failed to setup RX queue: No mempool allocation on the socket %d\n",
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/4] app/testpmd: consolidate port socket ID computation
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
2026-07-02 16:10 ` [PATCH 1/4] app/testpmd: fix port socket ID " Stephen Hemminger
@ 2026-07-02 16:10 ` Stephen Hemminger
2026-07-02 16:10 ` [PATCH 3/4] app/testpmd: display any socket ID as text Stephen Hemminger
2026-07-02 16:10 ` [PATCH 4/4] app/testpmd: report reason when queue setup command fails Stephen Hemminger
3 siblings, 0 replies; 6+ messages in thread
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Aman Singh
The socket id of a port was computed in three places with
diverging copies of the same policy:
- init_config() and init_fwd_streams() duplicated the full policy
(--port-numa-config, device socket id, first available socket,
--socket-num);
- setup_attached_port() used only the device socket id and ignored
--port-numa-config, --no-numa and --socket-num, so a hot-attached
port could be keyed to a socket where no mbuf pool exists.
Move the policy into a single helper, port_socket_id(), and use it
in all three places.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/testpmd.c | 69 +++++++++++++++++-------------------------
1 file changed, 28 insertions(+), 41 deletions(-)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index b5dca03047..04f0e15bee 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1740,6 +1740,31 @@ uma_socket_id(void)
(unsigned int)SOCKET_ID_ANY : socket_num;
}
+/*
+ * Socket id to use for a port: the socket its mbuf pools are created
+ * on and where its queue resources are placed.
+ */
+static unsigned int
+port_socket_id(portid_t pid)
+{
+ unsigned int socket_id;
+
+ if (!numa_support)
+ return uma_socket_id();
+
+ socket_id = port_numa[pid];
+ if (socket_id == NUMA_NO_CONFIG) {
+ socket_id = rte_eth_dev_socket_id(pid);
+ /*
+ * If socket_id is invalid,
+ * set to the first available socket.
+ */
+ if (check_socket_id(socket_id) < 0)
+ socket_id = socket_ids[0];
+ }
+ return socket_id;
+}
+
static void
init_config(void)
{
@@ -1774,25 +1799,8 @@ init_config(void)
}
RTE_ETH_FOREACH_DEV(pid) {
- uint32_t socket_id;
-
- if (numa_support) {
- socket_id = port_numa[pid];
- if (port_numa[pid] == NUMA_NO_CONFIG) {
- socket_id = rte_eth_dev_socket_id(pid);
-
- /*
- * if socket_id is invalid,
- * set to the first available socket.
- */
- if (check_socket_id(socket_id) < 0)
- socket_id = socket_ids[0];
- }
- } else {
- socket_id = uma_socket_id();
- }
/* Apply default TxRx configuration for all ports */
- init_config_port_offloads(pid, socket_id);
+ init_config_port_offloads(pid, port_socket_id(pid));
}
/*
* Create pools of mbuf.
@@ -1916,23 +1924,7 @@ init_fwd_streams(void)
nb_txq, port->dev_info.max_tx_queues);
return -1;
}
- if (numa_support) {
- if (port_numa[pid] != NUMA_NO_CONFIG)
- port->socket_id = port_numa[pid];
- else {
- port->socket_id = rte_eth_dev_socket_id(pid);
-
- /*
- * if socket_id is invalid,
- * set to the first available socket.
- */
- if (check_socket_id(port->socket_id) < 0)
- port->socket_id = socket_ids[0];
- }
- }
- else {
- port->socket_id = uma_socket_id();
- }
+ port->socket_id = port_socket_id(pid);
}
q = RTE_MAX(nb_rxq, nb_txq);
@@ -3604,14 +3596,9 @@ attach_port(char *identifier)
static void
setup_attached_port(portid_t pi)
{
- unsigned int socket_id;
int ret;
- socket_id = (unsigned)rte_eth_dev_socket_id(pi);
- /* if socket_id is invalid, set to the first available socket. */
- if (check_socket_id(socket_id) < 0)
- socket_id = socket_ids[0];
- reconfig(pi, socket_id);
+ reconfig(pi, port_socket_id(pi));
ret = rte_eth_promiscuous_enable(pi);
if (ret != 0)
fprintf(stderr,
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 3/4] app/testpmd: display any socket ID as text
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
2026-07-02 16:10 ` [PATCH 1/4] app/testpmd: fix port socket ID " Stephen Hemminger
2026-07-02 16:10 ` [PATCH 2/4] app/testpmd: consolidate port socket ID computation Stephen Hemminger
@ 2026-07-02 16:10 ` Stephen Hemminger
2026-07-02 16:10 ` [PATCH 4/4] app/testpmd: report reason when queue setup command fails Stephen Hemminger
3 siblings, 0 replies; 6+ messages in thread
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Aman Singh
When NUMA support is disabled the port socket id is SOCKET_ID_ANY,
which was displayed as 4294967295 in "show port info", the
"Configuring Port" message, the mbuf pool creation log and the
pool lookup error message. Print "any" instead.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/cmdline.c | 6 ++++--
app/test-pmd/config.c | 18 ++++++++++++------
app/test-pmd/testpmd.c | 28 ++++++++++++++++++----------
app/test-pmd/testpmd.h | 11 +++++++++++
4 files changed, 45 insertions(+), 18 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index 3c39e27aa8..bb62778a26 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3078,9 +3078,11 @@ cmd_setup_rxtx_queue_parsed(
mp = mbuf_pool_find_first(socket_id);
if (mp == NULL) {
+ char buf[16];
+
fprintf(stderr,
- "Failed to setup RX queue: No mempool allocation on the socket %d\n",
- rxring_numa[res->portid]);
+ "Failed to setup RX queue: No mempool allocation on the socket %s\n",
+ socket_id_str(socket_id, buf, sizeof(buf)));
return;
}
ret = rx_queue_setup(res->portid,
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 9d457ca88e..166caa10b0 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -808,6 +808,7 @@ port_infos_display(portid_t port_id)
static const char *info_border = "*********************";
uint16_t mtu;
char name[RTE_ETH_NAME_MAX_LEN];
+ char buf[16];
int ret;
char fw_version[ETHDEV_FWVERS_LEN];
uint32_t lanes;
@@ -841,7 +842,8 @@ port_infos_display(portid_t port_id)
if (rte_dev_devargs(dev_info.device) && rte_dev_devargs(dev_info.device)->args)
printf("\nDevargs: %s", rte_dev_devargs(dev_info.device)->args);
- printf("\nConnect to socket: %u", port->socket_id);
+ printf("\nConnect to socket: %s",
+ socket_id_str(port->socket_id, buf, sizeof(buf)));
if (port_numa[port_id] != NUMA_NO_CONFIG) {
mp = mbuf_pool_find(port_numa[port_id], 0);
@@ -849,7 +851,8 @@ port_infos_display(portid_t port_id)
printf("\nmemory allocation on the socket: %d",
port_numa[port_id]);
} else
- printf("\nmemory allocation on the socket: %u",port->socket_id);
+ printf("\nmemory allocation on the socket: %s",
+ socket_id_str(port->socket_id, buf, sizeof(buf)));
printf("\nLink status: %s\n", (link.link_status) ? ("up") : ("down"));
printf("Link speed: %s\n", rte_eth_link_speed_to_str(link.link_speed));
@@ -5642,6 +5645,7 @@ pkt_fwd_config_display(struct fwd_config *cfg)
struct fwd_stream *fs;
lcoreid_t lc_id;
streamid_t sm_id;
+ char buf[16];
printf("%s%s%s packet forwarding%s - ports=%d - cores=%d - streams=%d - "
"NUMA support %s, MP allocation mode: %s\n",
@@ -5664,12 +5668,14 @@ pkt_fwd_config_display(struct fwd_config *cfg)
fwd_lcores[lc_id]->stream_nb);
for (sm_id = 0; sm_id < fwd_lcores[lc_id]->stream_nb; sm_id++) {
fs = fwd_streams[fwd_lcores[lc_id]->stream_idx + sm_id];
- printf("\n RX P=%d/Q=%d (socket %u) -> TX "
- "P=%d/Q=%d (socket %u) ",
+ printf("\n RX P=%d/Q=%d (socket %s) -> ",
fs->rx_port, fs->rx_queue,
- ports[fs->rx_port].socket_id,
+ socket_id_str(ports[fs->rx_port].socket_id,
+ buf, sizeof(buf)));
+ printf("TX P=%d/Q=%d (socket %s) ",
fs->tx_port, fs->tx_queue,
- ports[fs->tx_port].socket_id);
+ socket_id_str(ports[fs->tx_port].socket_id,
+ buf, sizeof(buf)));
print_ethaddr("peer=",
&peer_eth_addrs[fs->peer_addr]);
}
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 04f0e15bee..69e631d386 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -1263,6 +1263,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
unsigned int socket_id, uint16_t size_idx)
{
char pool_name[RTE_MEMPOOL_NAMESIZE];
+ char sock_str[16];
struct rte_mempool *rte_mp = NULL;
#ifndef RTE_EXEC_ENV_WINDOWS
uint32_t mb_size;
@@ -1274,14 +1275,17 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
rte_mp = rte_mempool_lookup(pool_name);
if (rte_mp == NULL)
rte_exit(EXIT_FAILURE,
- "Get mbuf pool for socket %u failed: %s\n",
- socket_id, rte_strerror(rte_errno));
+ "Get mbuf pool for socket %s failed: %s\n",
+ socket_id_str(socket_id, sock_str,
+ sizeof(sock_str)),
+ rte_strerror(rte_errno));
return rte_mp;
}
TESTPMD_LOG(INFO,
- "create a new mbuf pool <%s>: n=%u, size=%u, socket=%u\n",
- pool_name, nb_mbuf, mbuf_seg_size, socket_id);
+ "create a new mbuf pool <%s>: n=%u, size=%u, socket=%s\n",
+ pool_name, nb_mbuf, mbuf_seg_size,
+ socket_id_str(socket_id, sock_str, sizeof(sock_str)));
switch (mp_alloc_type) {
case MP_ALLOC_NATIVE:
@@ -1366,8 +1370,9 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
#endif
if (rte_mp == NULL) {
rte_exit(EXIT_FAILURE,
- "Creation of mbuf pool for socket %u failed: %s\n",
- socket_id, rte_strerror(rte_errno));
+ "Creation of mbuf pool for socket %s failed: %s\n",
+ socket_id_str(socket_id, sock_str, sizeof(sock_str)),
+ rte_strerror(rte_errno));
} else if (verbose_level > 0) {
rte_mempool_dump(stdout, rte_mp);
}
@@ -2973,6 +2978,7 @@ int
start_port(portid_t pid)
{
int diag;
+ char buf[16];
portid_t pi;
portid_t p_pi = RTE_MAX_ETHPORTS;
portid_t pl[RTE_MAX_ETHPORTS];
@@ -3027,8 +3033,9 @@ start_port(portid_t pid)
}
}
configure_rxtx_dump_callbacks(0);
- printf("Configuring Port %d (socket %u)\n", pi,
- port->socket_id);
+ printf("Configuring Port %d (socket %s)\n", pi,
+ socket_id_str(port->socket_id,
+ buf, sizeof(buf)));
if (nb_hairpinq > 0 &&
rte_eth_dev_hairpin_capability_get(pi, &cap)) {
fprintf(stderr,
@@ -3156,8 +3163,9 @@ start_port(portid_t pid)
(port->socket_id);
if (mp == NULL) {
fprintf(stderr,
- "Failed to setup RX queue: No mempool allocation on the socket %d\n",
- port->socket_id);
+ "Failed to setup RX queue: No mempool allocation on the socket %s\n",
+ socket_id_str(port->socket_id,
+ buf, sizeof(buf)));
return -1;
}
diag = rx_queue_setup(pi, qi,
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index 3d4b36d668..1732fa1c19 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -873,6 +873,17 @@ current_fwd_lcore(void)
void
parse_fwd_portlist(const char *port);
+/* Format a socket id for display, SOCKET_ID_ANY as "any". */
+static inline const char *
+socket_id_str(unsigned int socket_id, char *buf, size_t size)
+{
+ if (socket_id == (unsigned int)SOCKET_ID_ANY)
+ snprintf(buf, size, "any");
+ else
+ snprintf(buf, size, "%u", socket_id);
+ return buf;
+}
+
/* Mbuf Pools */
static inline void
mbuf_poolname_build(unsigned int sock_id, char *mp_name,
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 4/4] app/testpmd: report reason when queue setup command fails
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
` (2 preceding siblings ...)
2026-07-02 16:10 ` [PATCH 3/4] app/testpmd: display any socket ID as text Stephen Hemminger
@ 2026-07-02 16:10 ` Stephen Hemminger
3 siblings, 0 replies; 6+ messages in thread
From: Stephen Hemminger @ 2026-07-02 16:10 UTC (permalink / raw)
To: dev; +Cc: Stephen Hemminger, Aman Singh
The interactive "port <id> rxq|txq <id> setup" command printed a
bare failure message. rte_eth_rx/tx_queue_setup() can fail with
-EBUSY without logging anything, for example when the port is
started and the PMD does not support runtime queue setup, leaving
the user with no clue:
testpmd> port 0 rxq 0 setup
Failed to setup RX queue
Print the error string:
Failed to setup RX queue: Device or resource busy
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
app/test-pmd/cmdline.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/test-pmd/cmdline.c b/app/test-pmd/cmdline.c
index bb62778a26..e0dcdc1193 100644
--- a/app/test-pmd/cmdline.c
+++ b/app/test-pmd/cmdline.c
@@ -3092,7 +3092,8 @@ cmd_setup_rxtx_queue_parsed(
&port->rxq[res->qid].conf,
mp);
if (ret)
- fprintf(stderr, "Failed to setup RX queue\n");
+ fprintf(stderr, "Failed to setup RX queue: %s\n",
+ rte_strerror(-ret));
} else {
socket_id = txring_numa[res->portid];
if (!numa_support || socket_id == NUMA_NO_CONFIG)
@@ -3109,7 +3110,8 @@ cmd_setup_rxtx_queue_parsed(
socket_id,
&port->txq[res->qid].conf);
if (ret)
- fprintf(stderr, "Failed to setup TX queue\n");
+ fprintf(stderr, "Failed to setup TX queue: %s\n",
+ rte_strerror(-ret));
}
}
--
2.53.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
end of thread, other threads:[~2026-07-02 16:13 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-02 13:07 [PATCH] app/testpmd: fix multi-pool Rx setup with --no-NUMA Maayan Kashani
2026-07-02 16:10 ` [PATCH 0/4] app/testpmd: fix socket id handling with NUMA disabled Stephen Hemminger
2026-07-02 16:10 ` [PATCH 1/4] app/testpmd: fix port socket ID " Stephen Hemminger
2026-07-02 16:10 ` [PATCH 2/4] app/testpmd: consolidate port socket ID computation Stephen Hemminger
2026-07-02 16:10 ` [PATCH 3/4] app/testpmd: display any socket ID as text Stephen Hemminger
2026-07-02 16:10 ` [PATCH 4/4] app/testpmd: report reason when queue setup command fails Stephen Hemminger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.