From: Mohsin Kazmi Date: Wed, 7 Nov 2018 15:55:18 +0000 (+0100) Subject: physmem: Add physmem map support X-Git-Tag: v19.04-rc0~427 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=vpp.git;a=commitdiff_plain;h=6ec99c3147f3e8fd608973cd8f4a25c156bb1490 physmem: Add physmem map support This patch adds support for mapping the virtual address to physical address and size of memory allocated. Change-Id: I7659a1881308e89b215c486fecd7c973076d0773 Signed-off-by: Mohsin Kazmi --- diff --git a/src/vlib/physmem.c b/src/vlib/physmem.c index f881e0a8e71..37bf693f182 100755 --- a/src/vlib/physmem.c +++ b/src/vlib/physmem.c @@ -112,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)) { @@ -126,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* */ diff --git a/src/vppinfra/pmalloc.c b/src/vppinfra/pmalloc.c index 46ccd7f6efc..62b4f60c2eb 100644 --- a/src/vppinfra/pmalloc.c +++ b/src/vppinfra/pmalloc.c @@ -687,6 +687,27 @@ format_pmalloc (u8 * s, va_list * va) return s; } +u8 * +format_pmalloc_map (u8 * s, va_list * va) +{ + clib_pmalloc_main_t *pm = va_arg (*va, clib_pmalloc_main_t *); + + u32 index; + s = format (s, "%16s %13s %8s", "virtual-addr", "physical-addr", "size"); + vec_foreach_index (index, pm->lookup_table) + { + uword *lookup_val, pa, va; + lookup_val = vec_elt_at_index (pm->lookup_table, index); + va = pointer_to_uword (pm->base) + (index << pm->lookup_log2_page_sz); + pa = va - *lookup_val; + s = + format (s, "\n %16p %13p %8U", uword_to_pointer (va, u64), + uword_to_pointer (pa, u64), format_log2_page_size, + pm->lookup_log2_page_sz); + } + return s; +} + /* * fd.io coding-style-patch-verification: ON * diff --git a/src/vppinfra/pmalloc.h b/src/vppinfra/pmalloc.h index 9cd652971a6..eae317fb945 100644 --- a/src/vppinfra/pmalloc.h +++ b/src/vppinfra/pmalloc.h @@ -120,6 +120,7 @@ void *clib_pmalloc_alloc_from_arena (clib_pmalloc_main_t * pm, void *arena_va, uword size, uword align); format_function_t format_pmalloc; +format_function_t format_pmalloc_map; always_inline clib_error_t * clib_pmalloc_last_error (clib_pmalloc_main_t * pm)