From: Sinan Kaya <ok...@kernel.org>

Initialize heap area just once.

Signed-off-by: Sinan Kaya <ok...@kernel.org>
---
 lib/eal/common/eal_common_memory.c | 5 +++++
 lib/eal/common/malloc_heap.c       | 7 +++++++
 2 files changed, 12 insertions(+)

diff --git a/lib/eal/common/eal_common_memory.c 
b/lib/eal/common/eal_common_memory.c
index 688dc615d7..b6fcc293be 100644
--- a/lib/eal/common/eal_common_memory.c
+++ b/lib/eal/common/eal_common_memory.c
@@ -39,6 +39,7 @@
 
 static void *next_baseaddr;
 static uint64_t system_page_sz;
+static bool memory_initialized;
 
 #define MAX_MMAP_WITH_DEFINED_ADDR_TRIES 5
 void *
@@ -1088,6 +1089,9 @@ rte_eal_memory_init(void)
        if (!mcfg)
                return -1;
 
+       if (memory_initialized)
+               return 0;
+
        /* lock mem hotplug here, to prevent races while we init */
        rte_mcfg_mem_read_lock();
 
@@ -1106,6 +1110,7 @@ rte_eal_memory_init(void)
        if (internal_conf->no_shconf == 0 && rte_eal_memdevice_init() < 0)
                goto fail;
 
+       memory_initialized = true;
        return 0;
 fail:
        rte_mcfg_mem_read_unlock();
diff --git a/lib/eal/common/malloc_heap.c b/lib/eal/common/malloc_heap.c
index 6eb6fcda5e..facc16a802 100644
--- a/lib/eal/common/malloc_heap.c
+++ b/lib/eal/common/malloc_heap.c
@@ -31,6 +31,8 @@
 #define CONST_MAX(a, b) (a > b ? a : b) /* RTE_MAX is not a constant */
 #define EXTERNAL_HEAP_MIN_SOCKET_ID (CONST_MAX((1 << 8), RTE_MAX_NUMA_NODES))
 
+static bool heap_initialized;
+
 static unsigned
 check_hugepage_sz(unsigned flags, uint64_t hugepage_sz)
 {
@@ -1406,6 +1408,9 @@ rte_eal_malloc_heap_init(void)
        const struct internal_config *internal_conf =
                eal_get_internal_configuration();
 
+       if (heap_initialized)
+               return 0;
+
        if (internal_conf->match_allocations)
                RTE_LOG(DEBUG, EAL, "Hugepages will be freed exactly as 
allocated.\n");
 
@@ -1443,6 +1448,8 @@ rte_eal_malloc_heap_init(void)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
+       heap_initialized = true;
+
        /* add all IOVA-contiguous areas to the heap */
        return rte_memseg_contig_walk(malloc_add_seg, NULL);
 }
-- 
2.25.1

Reply via email to