physmem: make fake allocation non-fatal if we cannot pick numa node 64/8364/2
authorDamjan Marion <damarion@cisco.com>
Fri, 8 Sep 2017 17:21:00 +0000 (19:21 +0200)
committerDave Wallace <dwallacelf@gmail.com>
Fri, 8 Sep 2017 20:10:36 +0000 (20:10 +0000)
Change-Id: I563c043ed82e3ef199fc3d47931108f31cc01728
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vlib/linux/physmem.c

index 6731295..fddff2e 100644 (file)
@@ -170,8 +170,13 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size,
   if (get_mempolicy (&old_mpol, old_mask->maskp, old_mask->size + 1, NULL, 0)
       == -1)
     {
-      error = clib_error_return_unix (0, "get_mempolicy");
-      goto error;
+      if ((flags & VLIB_PHYSMEM_F_FAKE) == 0)
+       {
+         error = clib_error_return_unix (0, "get_mempolicy");
+         goto error;
+       }
+      else
+       old_mpol = -1;
     }
 
   if ((flags & VLIB_PHYSMEM_F_FAKE) == 0)
@@ -246,7 +251,8 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size,
        goto error;
     }
 
-  numa_set_preferred (numa_node);
+  if (old_mpol != -1)
+    numa_set_preferred (numa_node);
 
   pr->mem = mmap (0, size, (PROT_READ | PROT_WRITE), mmap_flags, pr->fd, 0);
 
@@ -257,7 +263,8 @@ unix_physmem_region_alloc (vlib_main_t * vm, char *name, u32 size,
       goto error;
     }
 
-  if (set_mempolicy (old_mpol, old_mask->maskp, old_mask->size + 1) == -1)
+  if (old_mpol != -1 &&
+      set_mempolicy (old_mpol, old_mask->maskp, old_mask->size + 1) == -1)
     {
       error = clib_error_return_unix (0, "set_mempolicy");
       goto error;