X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fphysmem.c;h=37bf693f1821855266fd7907095c7254e2ab1bc1;hb=6ec99c3147f3e8fd608973cd8f4a25c156bb1490;hp=e2d88922f5662e7a5628889468894b0c29cf2a25;hpb=68b4da67deb2e8ca224bb5abaeb9dbc7ae8e378c;p=vpp.git diff --git a/src/vlib/physmem.c b/src/vlib/physmem.c index e2d88922f56..37bf693f182 100755 --- a/src/vlib/physmem.c +++ b/src/vlib/physmem.c @@ -31,7 +31,8 @@ clib_error_t * vlib_physmem_shared_map_create (vlib_main_t * vm, char *name, uword size, - u32 numa_node, u32 * map_index) + u32 log2_page_sz, u32 numa_node, + u32 * map_index) { clib_pmalloc_main_t *pm = vm->physmem_main.pmalloc_main; vlib_physmem_main_t *vpm = &vm->physmem_main; @@ -39,9 +40,10 @@ vlib_physmem_shared_map_create (vlib_main_t * vm, char *name, uword size, clib_pmalloc_arena_t *a; clib_error_t *error = 0; void *va; - int i; + uword i; - va = clib_pmalloc_create_shared_arena (pm, name, size, numa_node); + va = clib_pmalloc_create_shared_arena (pm, name, size, log2_page_sz, + numa_node); if (va == 0) return clib_error_return (0, "%U", format_clib_error, @@ -53,12 +55,13 @@ vlib_physmem_shared_map_create (vlib_main_t * vm, char *name, uword size, *map_index = map->index = map - vpm->maps; map->base = va; map->fd = a->fd; - map->n_pages = a->n_pages; - map->log2_page_size = a->log2_page_sz; + map->n_pages = a->n_pages * a->subpages_per_page; + map->log2_page_size = a->log2_subpage_sz; for (i = 0; i < a->n_pages; i++) { - uword pa = clib_pmalloc_get_pa (pm, (u8 *) va + (i << a->log2_page_sz)); + uword pa = + clib_pmalloc_get_pa (pm, (u8 *) va + (i << a->log2_subpage_sz)); /* maybe iova */ if (pa == 0) @@ -87,7 +90,7 @@ vlib_physmem_init (vlib_main_t * vm) /* check if pagemap is accessible */ pt = clib_mem_vm_get_paddr (&pt, min_log2 (sysconf (_SC_PAGESIZE)), 1); - if (pt[0]) + if (pt && pt[0]) vpm->flags |= VLIB_PHYSMEM_MAIN_F_HAVE_PAGEMAP; vec_free (pt); @@ -109,7 +112,7 @@ show_physmem (vlib_main_t * vm, { vlib_physmem_main_t *vpm = &vm->physmem_main; unformat_input_t _line_input, *line_input = &_line_input; - u32 verbose = 0; + u32 verbose = 0, map = 0; if (unformat_user (input, unformat_line_input, line_input)) { @@ -123,20 +126,26 @@ show_physmem (vlib_main_t * vm, verbose = 2; else if (unformat (line_input, "d")) verbose = 2; + else if (unformat (line_input, "map")) + map = 1; else break; } unformat_free (line_input); } - vlib_cli_output (vm, " %U", format_pmalloc, vpm->pmalloc_main, verbose); + if (map) + vlib_cli_output (vm, " %U", format_pmalloc_map, vpm->pmalloc_main); + else + vlib_cli_output (vm, " %U", format_pmalloc, vpm->pmalloc_main, verbose); + return 0; } /* *INDENT-OFF* */ VLIB_CLI_COMMAND (show_physmem_command, static) = { .path = "show physmem", - .short_help = "Show physical memory allocation", + .short_help = "show physmem [verbose | detail | map]", .function = show_physmem, }; /* *INDENT-ON* */