vlib: add max-size configuration parameter for pmalloc
[vpp.git] / src / svm / ssvm.c
index d629afc..737d234 100644 (file)
@@ -213,7 +213,7 @@ ssvm_delete_shm (ssvm_private_t * ssvm)
   vec_free (fn);
   vec_free (ssvm->name);
 
-  munmap ((void *) ssvm->requested_va, ssvm->ssvm_size);
+  munmap ((void *) ssvm->sh, ssvm->ssvm_size);
 }
 
 /**
@@ -347,9 +347,8 @@ ssvm_delete_memfd (ssvm_private_t * memfd)
 int
 ssvm_master_init_private (ssvm_private_t * ssvm)
 {
+  uword pagesize = clib_mem_get_page_size (), rnd_size = 0;
   ssvm_shared_header_t *sh;
-  u32 pagesize = clib_mem_get_page_size ();
-  u32 rnd_size = 0;
   u8 *heap;
 
   rnd_size = clib_max (ssvm->ssvm_size + (pagesize - 1), ssvm->ssvm_size);
@@ -370,7 +369,18 @@ ssvm_master_init_private (ssvm_private_t * ssvm)
   }
 #else
   heap = create_mspace (rnd_size, 1 /* locked */ );
+  if (heap == 0)
+    {
+      clib_unix_warning ("mheap alloc");
+      return -1;
+    }
+
   mspace_disable_expand (heap);
+
+  /* Find actual size because mspace size is rounded up by dlmalloc */
+  struct dlmallinfo dlminfo;
+  dlminfo = mspace_mallinfo (heap);
+  rnd_size = dlminfo.fordblks;
 #endif
 
   ssvm->ssvm_size = rnd_size;