vppinfra: autodetect default hugepage size
[vpp.git] / src / vppinfra / pmalloc.c
index d354cce..a8b47d7 100644 (file)
@@ -55,26 +55,12 @@ pmalloc_validate_numa_node (u32 * numa_node)
 int
 clib_pmalloc_init (clib_pmalloc_main_t * pm, uword size)
 {
-  struct stat st;
   uword off, pagesize;
-  int fd;
 
   ASSERT (pm->error == 0);
 
-  pm->log2_page_sz = 21;
-  pm->error = clib_mem_create_hugetlb_fd ("detect_hugepage_size", &fd);
-
-  if (pm->error)
-    return -1;
-
-  if (fd != -1)
-    {
-      if (fstat (fd, &st) == -1)
-       pm->log2_page_sz = min_log2 (st.st_blksize);
-      close (fd);
-    }
-
-  pagesize = 1ULL << pm->log2_page_sz;
+  pagesize = clib_mem_get_default_hugepage_size ();
+  pm->log2_page_sz = min_log2 (pagesize);
 
   size = size ? size : ((u64) DEFAULT_RESERVED_MB) << 20;
   size = round_pow2 (size, pagesize);
@@ -279,7 +265,7 @@ pmalloc_map_pages (clib_pmalloc_main_t * pm, clib_pmalloc_arena_t * a,
       goto error;
     }
 
-  memset (va, 0, n_pages << pm->log2_page_sz);
+  clib_memset (va, 0, n_pages << pm->log2_page_sz);
   sys_page_size = sysconf (_SC_PAGESIZE);
   pagemap_fd = open ((char *) "/proc/self/pagemap", O_RDONLY);
 
@@ -324,7 +310,8 @@ clib_pmalloc_create_shared_arena (clib_pmalloc_main_t * pm, char *name,
 {
   clib_pmalloc_arena_t *a;
   clib_pmalloc_page_t *pp;
-  u32 n_pages = round_pow2 (size, 1 << pm->log2_page_sz) >> pm->log2_page_sz;
+  u32 n_pages = round_pow2 (size, 1ULL << pm->log2_page_sz) >>
+    pm->log2_page_sz;
 
   if (n_pages + vec_len (pm->pages) > pm->max_pages)
     return 0;