X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fsvm%2Fssvm.c;h=69463b1f192628ab5989ca54391a18eee25836b4;hb=8ab4e507c;hp=2a6e6bf78da921f637bdc3e3711dff6094664da4;hpb=f9d4ab42724b260d5c242f7291d05f74cd725d7d;p=vpp.git diff --git a/src/svm/ssvm.c b/src/svm/ssvm.c index 2a6e6bf78da..69463b1f192 100644 --- a/src/svm/ssvm.c +++ b/src/svm/ssvm.c @@ -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,6 +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; @@ -383,8 +394,10 @@ ssvm_master_init_private (ssvm_private_t * ssvm) clib_memset (sh, 0, sizeof (*sh)); sh->heap = heap; + sh->ssvm_size = rnd_size; sh->ssvm_va = pointer_to_uword (heap); sh->type = SSVM_SEGMENT_PRIVATE; + sh->name = ssvm->name; return 0; }