[v2] eal/linux: skip attaching to external memory chunk

Message ID 1650532281-193591-1-git-send-email-deepak.khandelwal@intel.com (mailing list archive)
State Accepted, archived
Delegated to: David Marchand
Headers
Series [v2] eal/linux: skip attaching to external memory chunk |

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK
ci/github-robot: build success github build: passed
ci/intel-Testing success Testing PASS
ci/iol-mellanox-Performance success Performance Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-aarch64-unit-testing success Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-abi-testing success Testing PASS

Commit Message

Deepak Khandelwal April 21, 2022, 9:11 a.m. UTC
  Currently, EAL init in secondary processes will attach all fbarrays
in the memconfig to have access to primary process' page tables.
However, fbarrays corresponding to external memory segments should
not be attached at initialization, because this will happen as part
of `rte_extmem_attach` or `rte_malloc_heap_memory_attach` calls.

Both external memory API's document this:

rte_malloc:
http://doc.dpdk.org/api/rte__malloc_8h.html#af6360dea35bdf162feeb2b62cf149fd3

rte_extmem:
http://doc.dpdk.org/api/rte__memory_8h.html#a2796da68de6825f8edf53759f8e4d230

Fixes: ff3619d6244b ("malloc: allow attaching to external memory chunks")
Cc: stable@dpdk.org

Signed-off-by: Deepak Khandelwal <deepak.khandelwal@intel.com>
Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

---
v2:
* commit message updated and handle for BSD
---
 lib/eal/freebsd/eal_memory.c | 4 ++--
 lib/eal/linux/eal_memory.c   | 4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
  

Comments

David Marchand April 28, 2022, 12:08 p.m. UTC | #1
On Thu, Apr 21, 2022 at 11:36 AM Deepak Khandelwal
<deepak.khandelwal@intel.com> wrote:
>
> Currently, EAL init in secondary processes will attach all fbarrays
> in the memconfig to have access to primary process' page tables.
> However, fbarrays corresponding to external memory segments should
> not be attached at initialization, because this will happen as part
> of `rte_extmem_attach` or `rte_malloc_heap_memory_attach` calls.
>
> Both external memory API's document this:
>
> rte_malloc:
> http://doc.dpdk.org/api/rte__malloc_8h.html#af6360dea35bdf162feeb2b62cf149fd3
>
> rte_extmem:
> http://doc.dpdk.org/api/rte__memory_8h.html#a2796da68de6825f8edf53759f8e4d230
>
> Fixes: ff3619d6244b ("malloc: allow attaching to external memory chunks")
> Cc: stable@dpdk.org
>
> Signed-off-by: Deepak Khandelwal <deepak.khandelwal@intel.com>
> Suggested-by: Anatoly Burakov <anatoly.burakov@intel.com>
> Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>

Applied, thanks Deepak.
  

Patch

diff --git a/lib/eal/freebsd/eal_memory.c b/lib/eal/freebsd/eal_memory.c
index 78ac142..17ab10e 100644
--- a/lib/eal/freebsd/eal_memory.c
+++ b/lib/eal/freebsd/eal_memory.c
@@ -446,8 +446,8 @@  struct attach_walk_args {
 
 		msl = &mcfg->memsegs[msl_idx];
 
-		/* skip empty memseg lists */
-		if (msl->memseg_arr.len == 0)
+		/* skip empty and external memseg lists */
+		if (msl->memseg_arr.len == 0 || msl->external)
 			continue;
 
 		if (rte_fbarray_attach(&msl->memseg_arr)) {
diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
index ee1a9e6..c890c42 100644
--- a/lib/eal/linux/eal_memory.c
+++ b/lib/eal/linux/eal_memory.c
@@ -1874,8 +1874,8 @@  void numa_error(char *where)
 
 		msl = &mcfg->memsegs[msl_idx];
 
-		/* skip empty memseg lists */
-		if (msl->memseg_arr.len == 0)
+		/* skip empty and external memseg lists */
+		if (msl->memseg_arr.len == 0 || msl->external)
 			continue;
 
 		if (rte_fbarray_attach(&msl->memseg_arr)) {