X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fsvm%2Fssvm.c;h=a16965e5e6752779b114257b37443626358d39a5;hb=f8461bfb4822ca20f64df19dfbb3170e99f7e89d;hp=3e45175da0ea71c9e2f1ca9a6984bcb79aa0ede0;hpb=404b8a36e737e2911ca8874363a4e87cb707e5f9;p=vpp.git diff --git a/src/svm/ssvm.c b/src/svm/ssvm.c index 3e45175da0e..a16965e5e67 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); } /** @@ -352,8 +352,8 @@ ssvm_master_init_private (ssvm_private_t * ssvm) u32 rnd_size = 0; u8 *heap; - rnd_size = (ssvm->ssvm_size + (pagesize - 1)) & ~(pagesize - 1); - rnd_size = clib_min (rnd_size, ((u64) 1 << 32) - pagesize); + rnd_size = clib_max (ssvm->ssvm_size + (pagesize - 1), ssvm->ssvm_size); + rnd_size &= ~(pagesize - 1); #if USE_DLMALLOC == 0 { @@ -370,6 +370,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; @@ -385,6 +397,7 @@ ssvm_master_init_private (ssvm_private_t * ssvm) sh->heap = heap; sh->ssvm_va = pointer_to_uword (heap); sh->type = SSVM_SEGMENT_PRIVATE; + sh->name = ssvm->name; return 0; }