[dpdk-stable] patch 'mem: fix allocation failure on non-NUMA kernel' has been queued to LTS release 18.11.11

Kevin Traynor ktraynor at redhat.com
Thu Nov 5 13:40:07 CET 2020


Hi,

FYI, your patch has been queued to LTS release 18.11.11

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/10/20. 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-queue

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

Thanks.

Kevin.

---
>From 22e149b2dd88359e1543ae1581d13cabe4e47889 Mon Sep 17 00:00:00 2001
From: Nick Connolly <nick.connolly at mayadata.io>
Date: Mon, 12 Oct 2020 20:28:03 +0100
Subject: [PATCH] mem: fix allocation failure on non-NUMA kernel

[ upstream commit 9d42642e866ea100b190ad8de4c8b27d1b310a13 ]

Running dpdk-helloworld on Linux with lib numa present, but no kernel
support for NUMA (CONFIG_NUMA=n) causes rte_service_init() to fail with
EAL: error allocating rte services array.

alloc_seg() calls get_mempolicy to verify that the allocation
has happened on the correct socket, but receives ENOSYS from
the kernel and fails the allocation.

The allocated socket should only be verified if check_numa() is true.

Fixes: 2a96c88be83e ("mem: ease init in a docker container")

Signed-off-by: Nick Connolly <nick.connolly at mayadata.io>
Reviewed-by: Nicolas Dichtel <nicolas.dichtel at 6wind.com>
Acked-by: Anatoly Burakov <anatoly.burakov at intel.com>
---
 lib/librte_eal/linuxapp/eal/eal_memalloc.c | 30 ++++++++++++++--------
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
index dea2b5ec93..1a86dfdfb9 100644
--- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c
+++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
@@ -747,15 +747,23 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id,
 
 #ifdef RTE_EAL_NUMA_AWARE_HUGEPAGES
-	ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
-			    MPOL_F_NODE | MPOL_F_ADDR);
-	if (ret < 0) {
-		RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
-			__func__, strerror(errno));
-		goto mapped;
-	} else if (cur_socket_id != socket_id) {
-		RTE_LOG(DEBUG, EAL,
-				"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
-			__func__, socket_id, cur_socket_id);
-		goto mapped;
+	/*
+	 * If the kernel has been built without NUMA support, get_mempolicy()
+	 * will return an error. If check_numa() returns false, memory
+	 * allocation is not NUMA aware and the socket_id should not be
+	 * checked.
+	 */
+	if (check_numa()) {
+		ret = get_mempolicy(&cur_socket_id, NULL, 0, addr,
+					MPOL_F_NODE | MPOL_F_ADDR);
+		if (ret < 0) {
+			RTE_LOG(DEBUG, EAL, "%s(): get_mempolicy: %s\n",
+				__func__, strerror(errno));
+			goto mapped;
+		} else if (cur_socket_id != socket_id) {
+			RTE_LOG(DEBUG, EAL,
+					"%s(): allocation happened on wrong socket (wanted %d, got %d)\n",
+				__func__, socket_id, cur_socket_id);
+			goto mapped;
+		}
 	}
 #else
-- 
2.26.2

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2020-11-05 12:38:55.614507939 +0000
+++ 0060-mem-fix-allocation-failure-on-non-NUMA-kernel.patch	2020-11-05 12:38:54.259896034 +0000
@@ -1 +1 @@
-From 9d42642e866ea100b190ad8de4c8b27d1b310a13 Mon Sep 17 00:00:00 2001
+From 22e149b2dd88359e1543ae1581d13cabe4e47889 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit 9d42642e866ea100b190ad8de4c8b27d1b310a13 ]
+
@@ -17 +18,0 @@
-Cc: stable at dpdk.org
@@ -23 +24 @@
- lib/librte_eal/linux/eal_memalloc.c | 30 ++++++++++++++++++-----------
+ lib/librte_eal/linuxapp/eal/eal_memalloc.c | 30 ++++++++++++++--------
@@ -26,5 +27,5 @@
-diff --git a/lib/librte_eal/linux/eal_memalloc.c b/lib/librte_eal/linux/eal_memalloc.c
-index 40a5c4aa1d..6dc1b2baec 100644
---- a/lib/librte_eal/linux/eal_memalloc.c
-+++ b/lib/librte_eal/linux/eal_memalloc.c
-@@ -626,15 +626,23 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id,
+diff --git a/lib/librte_eal/linuxapp/eal/eal_memalloc.c b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
+index dea2b5ec93..1a86dfdfb9 100644
+--- a/lib/librte_eal/linuxapp/eal/eal_memalloc.c
++++ b/lib/librte_eal/linuxapp/eal/eal_memalloc.c
+@@ -747,15 +747,23 @@ alloc_seg(struct rte_memseg *ms, void *addr, int socket_id,



More information about the stable mailing list