[ovs-dev] [PATCH] dpdk: Refuse running on cpu >= RTE_MAX_LCORE.

David Marchand david.marchand at redhat.com
Fri Jun 26 12:27:38 UTC 2020


DPDK lcores range is [0, RTE_MAX_LCORE[.
Trying to use a lcore out of this range expose OVS to crashes in DPDK mempool
local cache array.
Prefer a "clean" abort so that users know that something is wrong with
their configuration.

Signed-off-by: David Marchand <david.marchand at redhat.com>
---
 lib/dpdk.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/lib/dpdk.c b/lib/dpdk.c
index 98d0e2643e..55ce9a9221 100644
--- a/lib/dpdk.c
+++ b/lib/dpdk.c
@@ -617,7 +617,14 @@ dpdk_set_lcore_id(unsigned cpu)
 {
     /* NON_PMD_CORE_ID is reserved for use by non pmd threads. */
     ovs_assert(cpu != NON_PMD_CORE_ID);
+    if (cpu >= RTE_MAX_LCORE) {
+        cpu = LCORE_ID_ANY;
+    }
     RTE_PER_LCORE(_lcore_id) = cpu;
+    if (rte_lcore_id() == LCORE_ID_ANY) {
+        ovs_abort(0, "PMD thread init failed, trying to use more cores than "
+                  "DPDK supports (RTE_MAX_LCORE %u).", RTE_MAX_LCORE);
+    }
 }
 
 void
-- 
2.23.0



More information about the dev mailing list