summaryrefslogtreecommitdiffstats
path: root/src/vppinfra/linux/mem.c
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2020-04-16 12:00:14 -0400
committerDamjan Marion <dmarion@me.com>2020-04-21 10:26:14 +0000
commit16e4a4a0ae39ebc1ded1b6dba2799b176aee1828 (patch)
tree14e21d5be2bb77b9301b5cb56118e3e9d8293811 /src/vppinfra/linux/mem.c
parentb9753540d2a69bbab807653fc3d0c1b43ec4d6d5 (diff)
vppinfra: bihash improvements
Template instances can allocate BIHASH_KVP_PER_PAGE data records tangent to the bucket, to remove a dependent read / prefetch. Template instances can ask for immediate memory allocation, to avoid several branches in the lookup path. Clean up l2 fib, gpb plugin codes: use clib_bihash_get_bucket(...) Use hugepages for bihash allocation arenas Type: improvement Signed-off-by: Dave Barach <dave@barachs.net> Signed-off-by: Damjan Marion <damarion@cisco.com> Change-Id: I92fc11bc58e48d84e2d61f44580916dd1c56361c
Diffstat (limited to 'src/vppinfra/linux/mem.c')
-rw-r--r--src/vppinfra/linux/mem.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/vppinfra/linux/mem.c b/src/vppinfra/linux/mem.c
index 3b7294f038a..d86402a9b16 100644
--- a/src/vppinfra/linux/mem.c
+++ b/src/vppinfra/linux/mem.c
@@ -344,6 +344,38 @@ clib_mem_vm_ext_free (clib_mem_vm_alloc_t * a)
}
}
+uword
+clib_mem_vm_reserve (uword start, uword size, u32 log2_page_sz)
+{
+ uword off, pagesize = 1 << log2_page_sz;
+ int mmap_flags = MAP_PRIVATE | MAP_ANONYMOUS;
+ u8 *p;
+
+ if (start)
+ mmap_flags |= MAP_FIXED;
+
+ size = round_pow2 (size, pagesize);
+
+ p = uword_to_pointer (start, void *);
+ p = mmap (p, size + pagesize, PROT_NONE, mmap_flags, -1, 0);
+
+ if (p == MAP_FAILED)
+ return ~0;
+
+ off = round_pow2 ((uword) p, pagesize) - (uword) p;
+
+ /* trim start and end of reservation to be page aligned */
+ if (off)
+ {
+ munmap (p, off);
+ p += off;
+ }
+
+ munmap (p + size, pagesize - off);
+
+ return (uword) p;
+}
+
u64 *
clib_mem_vm_get_paddr (void *mem, int log2_page_size, int n_pages)
{