X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fphysmem.c;h=846f9a091aeb52ce5b70ba733fdafc40df60bc9c;hb=000a029e4a6a481f35b978dfe474c82d8da88e95;hp=64920e1ebe2046858c14dfc9b823ad39c78dec5e;hpb=5a6c8096cb51065b056c927133781c9f2db9148d;p=vpp.git diff --git a/src/vlib/physmem.c b/src/vlib/physmem.c index 64920e1ebe2..846f9a091ae 100755 --- a/src/vlib/physmem.c +++ b/src/vlib/physmem.c @@ -29,7 +29,7 @@ #include #include -#ifdef __x86_64__ +#if defined(__x86_64__) && !defined(CLIB_SANITIZE_ADDR) /* we keep physmem in low 38 bits of VA address space as some IOMMU implamentation cannot map above that range */ #define VLIB_PHYSMEM_DEFAULT_BASE_ADDDR (1ULL << 36) @@ -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; } @@ -173,6 +178,9 @@ vlib_physmem_config (vlib_main_t * vm, unformat_input_t * input) { if (unformat (input, "base-addr 0x%lx", &vpm->base_addr)) ; + else if (unformat (input, "max-size %U", + unformat_memory_size, &vpm->max_size)) + ; else return unformat_parse_error (input); }