eal: ignore failure of naming a control thread
[dpdk.git] / lib / librte_eal / common / eal_common_memory.c
index ecc5bb2..e941e5d 100644 (file)
@@ -34,7 +34,7 @@
 
 #define MEMSEG_LIST_FMT "memseg-%" PRIu64 "k-%i-%i"
 
-static uint64_t baseaddr_offset;
+static void *next_baseaddr;
 static uint64_t system_page_sz;
 
 void *
@@ -56,9 +56,12 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
        allow_shrink = (flags & EAL_VIRTUAL_AREA_ALLOW_SHRINK) > 0;
        unmap = (flags & EAL_VIRTUAL_AREA_UNMAP) > 0;
 
-       if (requested_addr == NULL && internal_config.base_virtaddr != 0) {
-               requested_addr = (void *) (internal_config.base_virtaddr +
-                               (size_t)baseaddr_offset);
+       if (next_baseaddr == NULL && internal_config.base_virtaddr != 0 &&
+                       rte_eal_process_type() == RTE_PROC_PRIMARY)
+               next_baseaddr = (void *) internal_config.base_virtaddr;
+
+       if (requested_addr == NULL && next_baseaddr != NULL) {
+               requested_addr = next_baseaddr;
                requested_addr = RTE_PTR_ALIGN(requested_addr, page_sz);
                addr_is_hint = true;
        }
@@ -70,7 +73,7 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
         * system page size is the same as requested page size.
         */
        no_align = (requested_addr != NULL &&
-               ((uintptr_t)requested_addr & (page_sz - 1)) == 0) ||
+               ((uintptr_t)requested_addr & (page_sz - 1))) ||
                page_sz == system_page_sz;
 
        do {
@@ -116,6 +119,8 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
                RTE_LOG(WARNING, EAL, "WARNING! Base virtual address hint (%p != %p) not respected!\n",
                        requested_addr, aligned_addr);
                RTE_LOG(WARNING, EAL, "   This may cause issues with mapping memory into secondary processes\n");
+       } else if (next_baseaddr != NULL) {
+               next_baseaddr = RTE_PTR_ADD(aligned_addr, *size);
        }
 
        RTE_LOG(DEBUG, EAL, "Virtual area found at %p (size = 0x%zx)\n",
@@ -148,8 +153,6 @@ eal_get_virtual_area(void *requested_addr, size_t *size,
                        munmap(aligned_end, after_len);
        }
 
-       baseaddr_offset += *size;
-
        return aligned_addr;
 }