-#if USE_DLMALLOC == 0
- {
- mheap_t *heap_header;
-
- heap = mheap_alloc (0, rnd_size);
- if (heap == 0)
- {
- clib_unix_warning ("mheap alloc");
- return -1;
- }
- heap_header = mheap_header (heap);
- heap_header->flags |= MHEAP_FLAG_THREAD_SAFE;
- }
-#else
- heap = create_mspace (rnd_size, 1 /* locked */ );
+ 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 */ );
+ if (heap == 0)
+ {
+ clib_unix_warning ("mheap alloc");
+ return -1;
+ }
+