On 09-Jun-20 12:14 PM, Tal Shnaiderman wrote:
Subject: [PATCH v7 04/11] eal/mem: extract common code for memseg list
initialization
All supported OS create memory segment lists (MSL) and reserve VA space
for them in a nearly identical way. Move common code into EAL private
functions to reduce duplication.
Signed-off-by: Dmitry Kozlyuk <dmitry.kozl...@gmail.com>
---
lib/librte_eal/common/eal_common_memory.c | 97
++++++++++++++++++
lib/librte_eal/common/eal_private.h | 62 ++++++++++++
lib/librte_eal/freebsd/eal_memory.c | 94 ++++--------------
lib/librte_eal/linux/eal_memory.c | 115 +++++-----------------
4 files changed, 200 insertions(+), 168 deletions(-)
diff --git a/lib/librte_eal/common/eal_common_memory.c
b/lib/librte_eal/common/eal_common_memory.c
index f9fbd3e4e..3325d8c35 100644
--- a/lib/librte_eal/common/eal_common_memory.c
+++ b/lib/librte_eal/common/eal_common_memory.c
[snip]
+void
+eal_memseg_list_populate(struct rte_memseg_list *msl, void *addr, int
+n_segs) {
+ size_t page_sz = msl->page_sz;
+ int i;
+
+ for (i = 0; i < n_segs; i++) {
+ struct rte_fbarray *arr = &msl->memseg_arr;
+ struct rte_memseg *ms = rte_fbarray_get(arr, i);
Since rte_fbarray_get() can return NULL you should verify *ms isn't
dereferenced.
I don't think it's necessary in this case, since this fbarray was just
initialized with the n_segs value in the calling code.
+
+ if (rte_eal_iova_mode() == RTE_IOVA_VA)
+ ms->iova = (uintptr_t)addr;
+ else
+ ms->iova = RTE_BAD_IOVA;
+ ms->addr = addr;
+ ms->hugepage_sz = page_sz;
+ ms->socket_id = 0;
+ ms->len = page_sz;
+
+ rte_fbarray_set_used(arr, i);
+
+ addr = RTE_PTR_ADD(addr, page_sz);
+ }
+}
[snip]
--
2.25.4
--
Thanks,
Anatoly