xlat lib v2: Print some debug statistics
authorSandrine Bailleux <sandrine.bailleux@arm.com>
Fri, 26 May 2017 14:47:08 +0000 (15:47 +0100)
committerSandrine Bailleux <sandrine.bailleux@arm.com>
Tue, 25 Jul 2017 12:09:00 +0000 (13:09 +0100)
This patch adds some debug prints to display some statistics about page
tables usage. They are printed only if the LOG_LEVEL is at least 50
(i.e. VERBOSE).

Sample output for BL1:

VERBOSE:    Translation tables state:
VERBOSE:      Max allowed PA:  0xffffffff
VERBOSE:      Max allowed VA:  0xffffffff
VERBOSE:      Max mapped PA:   0x7fffffff
VERBOSE:      Max mapped VA:   0x7fffffff
VERBOSE:      Initial lookup level: 1
VERBOSE:      Entries @initial lookup level: 4
VERBOSE:      Used 4 sub-tables out of 5 (spare: 1)

Change-Id: If38956902e9616cdcd6065ecd140fe21482597ea
Signed-off-by: Sandrine Bailleux <sandrine.bailleux@arm.com>
lib/xlat_tables_v2/xlat_tables_internal.c

index f60d78c10ce06443fc8171e410f06b17dd7fff64..91e02d3d1bd0544413b746ab503f66202b97c707 100644 (file)
@@ -1042,6 +1042,30 @@ static void xlat_tables_print_internal(const uintptr_t table_base_va,
 void xlat_tables_print(xlat_ctx_t *ctx)
 {
 #if LOG_LEVEL >= LOG_LEVEL_VERBOSE
+       VERBOSE("Translation tables state:\n");
+       VERBOSE("  Max allowed PA:  0x%llx\n", ctx->pa_max_address);
+       VERBOSE("  Max allowed VA:  %p\n", (void *) ctx->va_max_address);
+       VERBOSE("  Max mapped PA:   0x%llx\n", ctx->max_pa);
+       VERBOSE("  Max mapped VA:   %p\n", (void *) ctx->max_va);
+
+       VERBOSE("  Initial lookup level: %i\n", ctx->base_level);
+       VERBOSE("  Entries @initial lookup level: %i\n",
+               ctx->base_table_entries);
+
+       int used_page_tables;
+#if PLAT_XLAT_TABLES_DYNAMIC
+       used_page_tables = 0;
+       for (int i = 0; i < ctx->tables_num; ++i) {
+               if (ctx->tables_mapped_regions[i] != 0)
+                       ++used_page_tables;
+       }
+#else
+       used_page_tables = ctx->next_table;
+#endif
+       VERBOSE("  Used %i sub-tables out of %i (spare: %i)\n",
+               used_page_tables, ctx->tables_num,
+               ctx->tables_num - used_page_tables);
+
        xlat_tables_print_internal(0, ctx->base_table, ctx->base_table_entries,
                                   ctx->base_level, ctx->execute_never_mask);
 #endif /* LOG_LEVEL >= LOG_LEVEL_VERBOSE */