* [dpdk-dev] [PATCH] app/testpmd: check socket id validity
@ 2014-04-15 13:51 David Marchand
2014-04-30 12:24 ` Thomas Monjalon
0 siblings, 1 reply; 2+ messages in thread
From: David Marchand @ 2014-04-15 13:51 UTC (permalink / raw)
To: dev; +Cc: Liu Xiaofeng
From: Liu Xiaofeng <xiaofeng.liu@6wind.com>
Now socket id is from device's numa_node, if it is invalid, just set it to 0
as default to avoid crash which will be caused by the reference to
port_per_socket[socket_id].
Also one warning is displayed to user that port-numa-config and
ring-numa-config parameters should be used along with --numa for NUMA mode.
A check for NUMA_NO_CONFIG was also missing from init_fwd_stream().
Signed-off-by: Liu Xiaofeng <xiaofeng.liu@6wind.com>
---
app/test-pmd/config.c | 6 ++----
app/test-pmd/testpmd.c | 40 +++++++++++++++++++++++++++++++++++++---
2 files changed, 39 insertions(+), 7 deletions(-)
diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c
index 0816227..1feb133 100644
--- a/app/test-pmd/config.c
+++ b/app/test-pmd/config.c
@@ -244,7 +244,6 @@ port_infos_display(portid_t port_id)
struct rte_port *port;
struct rte_eth_link link;
int vlan_offload;
- int socket_id;
struct rte_mempool * mp;
static const char *info_border = "*********************";
@@ -254,11 +253,10 @@ port_infos_display(portid_t port_id)
}
port = &ports[port_id];
rte_eth_link_get_nowait(port_id, &link);
- socket_id = rte_eth_dev_socket_id(port_id);
printf("\n%s Infos for port %-2d %s\n",
info_border, port_id, info_border);
print_ethaddr("MAC address: ", &port->eth_addr);
- printf("\nConnect to socket: %d",socket_id);
+ printf("\nConnect to socket: %d", port->socket_id);
if (port_numa[port_id] != NUMA_NO_CONFIG) {
mp = mbuf_pool_find(port_numa[port_id]);
@@ -266,7 +264,7 @@ 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: %d",socket_id);
+ printf("\nmemory allocation on the socket: %d",port->socket_id);
printf("\nLink status: %s\n", (link.link_status) ? ("up") : ("down"));
printf("Link speed: %u Mbps\n", (unsigned) link.link_speed);
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 04dca57..97229a5 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -475,6 +475,27 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
}
}
+/*
+ * Check given socket id is valid or not with NUMA mode,
+ * if valid, return 0, else return -1
+ */
+static int
+check_socket_id(const unsigned int socket_id)
+{
+ static int warning_once = 0;
+
+ if (socket_id >= MAX_SOCKET) {
+ if (!warning_once && numa_support)
+ printf("Warning: NUMA should be configured manually by"
+ " using --port-numa-config and"
+ " --ring-numa-config parameters along with"
+ " --numa.\n");
+ warning_once = 1;
+ return -1;
+ }
+ return 0;
+}
+
static void
init_config(void)
{
@@ -559,6 +580,10 @@ init_config(void)
port_per_socket[port_numa[pid]]++;
else {
uint32_t socket_id = rte_eth_dev_socket_id(pid);
+
+ /* if socket_id is invalid, set to 0 */
+ if (check_socket_id(socket_id) < 0)
+ socket_id = 0;
port_per_socket[socket_id]++;
}
}
@@ -611,8 +636,17 @@ init_fwd_streams(void)
port->dev_info.max_tx_queues);
return -1;
}
- if (numa_support)
- port->socket_id = rte_eth_dev_socket_id(pid);
+ 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 0 */
+ if (check_socket_id(port->socket_id) < 0)
+ port->socket_id = 0;
+ }
+ }
else {
if (socket_num == UMA_NO_CONFIG)
port->socket_id = 0;
@@ -1215,7 +1249,7 @@ start_port(portid_t pid)
port->need_reconfig = 0;
printf("Configuring Port %d (socket %d)\n", pi,
- rte_eth_dev_socket_id(pi));
+ port->socket_id);
/* configure port */
diag = rte_eth_dev_configure(pi, nb_rxq, nb_txq,
&(port->dev_conf));
--
1.7.10.4
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [dpdk-dev] [PATCH] app/testpmd: check socket id validity
2014-04-15 13:51 [dpdk-dev] [PATCH] app/testpmd: check socket id validity David Marchand
@ 2014-04-30 12:24 ` Thomas Monjalon
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Monjalon @ 2014-04-30 12:24 UTC (permalink / raw)
To: Liu Xiaofeng; +Cc: dev
2014-04-15 15:51, David Marchand:
> From: Liu Xiaofeng <xiaofeng.liu@6wind.com>
>
> Now socket id is from device's numa_node, if it is invalid, just set it to 0
> as default to avoid crash which will be caused by the reference to
> port_per_socket[socket_id].
>
> Also one warning is displayed to user that port-numa-config and
> ring-numa-config parameters should be used along with --numa for NUMA mode.
>
> A check for NUMA_NO_CONFIG was also missing from init_fwd_stream().
>
> Signed-off-by: Liu Xiaofeng <xiaofeng.liu@6wind.com>
Acked-by: Thomas Monjalon <thomas.monjalon@6wind.com>
Applied for version 1.6.0r2.
Thanks
--
Thomas
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-04-30 12:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-04-15 13:51 [dpdk-dev] [PATCH] app/testpmd: check socket id validity David Marchand
2014-04-30 12:24 ` Thomas Monjalon
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).