vppinfra: introduce clib_mem_main
[vpp.git] / src / vppinfra / pmalloc.c
index cca8039..870f364 100644 (file)
@@ -63,9 +63,8 @@ pmalloc_validate_numa_node (u32 * numa_node)
 int
 clib_pmalloc_init (clib_pmalloc_main_t * pm, uword base_addr, uword size)
 {
-  uword off, pagesize;
+  uword base, pagesize;
   u64 *pt = 0;
-  int mmap_flags;
 
   ASSERT (pm->error == 0);
 
@@ -84,32 +83,16 @@ clib_pmalloc_init (clib_pmalloc_main_t * pm, uword base_addr, uword size)
 
   pm->max_pages = size >> pm->def_log2_page_sz;
 
-  /* reserve VA space for future growth */
-  mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS;
+  base = clib_mem_vm_reserve (base_addr, size, pm->def_log2_page_sz);
 
-  if (base_addr)
-    mmap_flags |= MAP_FIXED;
-
-  pm->base = mmap (uword_to_pointer (base_addr, void *), size + pagesize,
-                  PROT_NONE, mmap_flags, -1, 0);
-
-  if (pm->base == MAP_FAILED)
+  if (base == ~0)
     {
-      pm->error = clib_error_return_unix (0, "failed to reserve %u pages");
+      pm->error = clib_error_return (0, "failed to reserve %u pages",
+                                    pm->max_pages);
       return -1;
     }
 
-  off = round_pow2 (pointer_to_uword (pm->base), pagesize) -
-    pointer_to_uword (pm->base);
-
-  /* trim start and end of reservation to be page aligned */
-  if (off)
-    {
-      munmap (pm->base, off);
-      pm->base += off;
-    }
-
-  munmap (pm->base + ((uword) pm->max_pages * pagesize), pagesize - off);
+  pm->base = uword_to_pointer (base, void *);
   return 0;
 }
 
@@ -600,24 +583,6 @@ clib_pmalloc_free (clib_pmalloc_main_t * pm, void *va)
     }
 }
 
-static u8 *
-format_log2_page_size (u8 * s, va_list * va)
-{
-  u32 log2_page_sz = va_arg (*va, u32);
-
-  if (log2_page_sz >= 30)
-    return format (s, "%uGB", 1 << (log2_page_sz - 30));
-
-  if (log2_page_sz >= 20)
-    return format (s, "%uMB", 1 << (log2_page_sz - 20));
-
-  if (log2_page_sz >= 10)
-    return format (s, "%uKB", 1 << (log2_page_sz - 10));
-
-  return format (s, "%uB", 1 << log2_page_sz);
-}
-
-
 static u8 *
 format_pmalloc_page (u8 * s, va_list * va)
 {