From c29681395ae2eff075f9c286ff5c6696a9df9453 Mon Sep 17 00:00:00 2001 From: "Lijian.Zhang" Date: Wed, 21 Aug 2019 17:51:16 +0800 Subject: tap: fix tap interface not working on Arm issue The VPP code tries to set all userspace memory in the table via IOCTL to VHOST_SET_MEM_TABLE. But on aarch64, the userspace address range is larger (48 bits) than that on x86 (47 bits). Below is an segment from /proc/[vpp]/maps. fffb41200000-fffb43a00000 rw-s 00000000 00:0e 532232 /anon_hugepage (deleted) Instead of setting all userspace memory space to vhost-net, will only set the address space reserved by pmalloc module during initialization. Type: fix Change-Id: I91cb35e990869b42094cf2cd0512593733d33677 Signed-off-by: Lijian Zhang Reviewed-by: Steve Capper (cherry picked from commit ba0da570f264785f6b50eff7829f6653c0924069) --- src/vlib/physmem.c | 7 ++++++- src/vlib/physmem.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/vlib') diff --git a/src/vlib/physmem.c b/src/vlib/physmem.c index 64920e1ebe2..a62309552f5 100755 --- a/src/vlib/physmem.c +++ b/src/vlib/physmem.c @@ -115,7 +115,12 @@ vlib_physmem_init (vlib_main_t * vm) if (vpm->base_addr == 0) vpm->base_addr = VLIB_PHYSMEM_DEFAULT_BASE_ADDDR; - clib_pmalloc_init (vpm->pmalloc_main, vpm->base_addr, 0); + clib_pmalloc_init (vpm->pmalloc_main, vpm->base_addr, vpm->max_size); + + /* update base_addr and max_size per actual allocation */ + vpm->base_addr = (uword) vpm->pmalloc_main->base; + vpm->max_size = (uword) vpm->pmalloc_main->max_pages << + vpm->pmalloc_main->def_log2_page_sz; return error; } diff --git a/src/vlib/physmem.h b/src/vlib/physmem.h index 7b7a3af3dfa..de79da51ad0 100644 --- a/src/vlib/physmem.h +++ b/src/vlib/physmem.h @@ -57,6 +57,7 @@ typedef struct { u32 flags; uword base_addr; + uword max_size; #define VLIB_PHYSMEM_MAIN_F_HAVE_PAGEMAP (1 << 0) #define VLIB_PHYSMEM_MAIN_F_HAVE_IOMMU (1 << 1) vlib_physmem_map_t *maps; -- cgit 1.2.3-korg