- rnd_size = (ssvm->ssvm_size + (pagesize - 1)) & ~pagesize;
- heap = mheap_alloc (0, rnd_size);
+ rnd_size = clib_max (ssvm->ssvm_size + (pagesize - 1), ssvm->ssvm_size);
+ rnd_size &= ~(pagesize - 1);
+
+ alloc.name = (char *) ssvm->name;
+ alloc.size = rnd_size + pagesize;
+ if (ssvm->numa)
+ {
+ alloc.numa_node = ssvm->numa;
+ alloc.flags |= CLIB_MEM_VM_F_NUMA_PREFER;
+ }
+
+ if ((err = clib_mem_vm_ext_alloc (&alloc)))
+ {
+ clib_error_report (err);
+ return SSVM_API_ERROR_CREATE_FAILURE;
+ }
+
+ heap = create_mspace_with_base ((u8 *) alloc.addr + pagesize, rnd_size,
+ 1 /* locked */ );