aboutsummaryrefslogtreecommitdiffstats
path: root/src/vlib
diff options
context:
space:
mode:
authorLijian.Zhang <Lijian.Zhang@arm.com>2019-08-21 17:51:16 +0800
committerDamjan Marion <dmarion@me.com>2019-09-03 15:55:40 +0000
commitba0da570f264785f6b50eff7829f6653c0924069 (patch)
tree086908ccf181fd345ebaee7c1d92fb6685c83ed7 /src/vlib
parent017dc45243bad1b3708d0a9b902d23ca47859344 (diff)
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 <Lijian.Zhang@arm.com> Reviewed-by: Steve Capper <Steve.Capper@arm.com>
Diffstat (limited to 'src/vlib')
-rwxr-xr-xsrc/vlib/physmem.c7
-rw-r--r--src/vlib/physmem.h1
2 files changed, 7 insertions, 1 deletions
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;