eal/linux: skip attaching to external memory chunk
Checks
Commit Message
when secondary process is initialized(rte_eal_init),
external memroy segments should not be attached.
These segments will be attached by explicitly invoking
rte_malloc_heap_memory_attach API
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>
---
lib/eal/linux/eal_memory.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Comments
On 04-Apr-22 1:32 PM, Deepak Khandelwal wrote:
> when secondary process is initialized(rte_eal_init),
> external memroy segments should not be attached.
> These segments will be attached by explicitly invoking
> rte_malloc_heap_memory_attach API
>
> 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>
> ---
> lib/eal/linux/eal_memory.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
> index ee1a9e6..18d2176 100644
> --- a/lib/eal/linux/eal_memory.c
> +++ b/lib/eal/linux/eal_memory.c
> @@ -1875,7 +1875,7 @@ void numa_error(char *where)
> msl = &mcfg->memsegs[msl_idx];
>
> /* skip empty memseg lists */
> - if (msl->memseg_arr.len == 0)
> + if (msl->memseg_arr.len == 0 || msl->external)
> continue;
>
> if (rte_fbarray_attach(&msl->memseg_arr)) {
Suggested rewording of commit message:
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.
Acked-by: Anatoly Burakov <anatoly.burakov@intel.com>
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
On 04-Apr-22 1:32 PM, Deepak Khandelwal wrote:
> when secondary process is initialized(rte_eal_init),
> external memroy segments should not be attached.
> These segments will be attached by explicitly invoking
> rte_malloc_heap_memory_attach API
>
> 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>
> ---
> lib/eal/linux/eal_memory.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/lib/eal/linux/eal_memory.c b/lib/eal/linux/eal_memory.c
> index ee1a9e6..18d2176 100644
> --- a/lib/eal/linux/eal_memory.c
> +++ b/lib/eal/linux/eal_memory.c
> @@ -1875,7 +1875,7 @@ void numa_error(char *where)
> msl = &mcfg->memsegs[msl_idx];
>
> /* skip empty memseg lists */
> - if (msl->memseg_arr.len == 0)
> + if (msl->memseg_arr.len == 0 || msl->external)
> continue;
>
> if (rte_fbarray_attach(&msl->memseg_arr)) {
Actually, this needs to be implemented for BSD as well. Windows doesn't
have support for secondary processes yet, so it's not applicable to
Windows as far as i can tell.
@@ -1875,7 +1875,7 @@ void numa_error(char *where)
msl = &mcfg->memsegs[msl_idx];
/* skip empty memseg lists */
- if (msl->memseg_arr.len == 0)
+ if (msl->memseg_arr.len == 0 || msl->external)
continue;
if (rte_fbarray_attach(&msl->memseg_arr)) {