X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvppinfra%2Flinux%2Fmem.c;h=2d968fae0ac70070fb900cf0220f25f10851bcd6;hb=642829de7958d5cd9c1c88f9845385882a7c211d;hp=75d2a7e0559f2e71ba6688f2cd79cac624bf841d;hpb=7b185360843c2b1cbcbeede64340add8a56fe440;p=vpp.git diff --git a/src/vppinfra/linux/mem.c b/src/vppinfra/linux/mem.c index 75d2a7e0559..2d968fae0ac 100644 --- a/src/vppinfra/linux/mem.c +++ b/src/vppinfra/linux/mem.c @@ -46,7 +46,7 @@ #define F_SEAL_WRITE 0x0008 /* prevent writes */ #endif -uword +u64 clib_mem_vm_get_page_size (int fd) { struct stat st = { 0 }; @@ -87,7 +87,7 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a) int log2_page_size; int n_pages; int old_mpol = -1; - u64 old_mask[16] = { 0 }; + long unsigned int old_mask[16] = { 0 }; /* save old numa mem policy if needed */ if (a->flags & (CLIB_MEM_VM_F_NUMA_PREFER | CLIB_MEM_VM_F_NUMA_FORCE)) @@ -127,6 +127,7 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a) if (mount ("none", (char *) mount_dir, "hugetlbfs", 0, NULL)) { + rmdir ((char *) mount_dir); err = clib_error_return_unix (0, "mount hugetlb directory '%s'", mount_dir); goto error; @@ -136,6 +137,8 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a) if ((fd = open ((char *) filename, O_CREAT | O_RDWR, 0755)) == -1) { + umount2 ((char *) mount_dir, MNT_DETACH); + rmdir ((char *) mount_dir); err = clib_error_return_unix (0, "open"); goto error; } @@ -198,7 +201,7 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a) } if (fd != -1) - if ((ftruncate (fd, n_pages * (1 << log2_page_size))) == -1) + if ((ftruncate (fd, (u64) n_pages * (1 << log2_page_size))) == -1) { err = clib_error_return_unix (0, "ftruncate"); goto error; @@ -207,10 +210,11 @@ clib_mem_vm_ext_alloc (clib_mem_vm_alloc_t * a) if (old_mpol != -1) { int rv; - u64 mask[16] = { 0 }; + long unsigned int mask[16] = { 0 }; mask[0] = 1 << a->numa_node; rv = set_mempolicy (MPOL_BIND, mask, sizeof (mask) * 8 + 1); - if (rv) + if (rv == -1 && a->numa_node != 0 && + (a->flags & CLIB_MEM_VM_F_NUMA_FORCE) != 0) { err = clib_error_return_unix (0, "set_mempolicy"); goto error; @@ -248,6 +252,17 @@ done: return err; } +void +clib_mem_vm_ext_free (clib_mem_vm_alloc_t * a) +{ + if (a != 0) + { + clib_mem_vm_free (a->addr, 1 << a->log2_page_size); + if (a->fd != -1) + close (a->fd); + } +} + u64 * clib_mem_vm_get_paddr (void *mem, int log2_page_size, int n_pages) {