Previously the /sys/kernel/debug/kernel_page_tables file would only show
lines for entries present in the page tables. However it is useful to
also show non-present entries as this makes the size and level of the
holes more visible. This aligns the behaviour with x86 which also shows
holes.

Signed-off-by: Steven Price <steven.pr...@arm.com>
---
 arch/arm64/mm/dump.c | 27 ++++++++++++++-------------
 1 file changed, 14 insertions(+), 13 deletions(-)

diff --git a/arch/arm64/mm/dump.c b/arch/arm64/mm/dump.c
index 5cc71ad567b4..765e8fc5640a 100644
--- a/arch/arm64/mm/dump.c
+++ b/arch/arm64/mm/dump.c
@@ -259,21 +259,22 @@ static void note_page(struct ptdump_state *pt_st, 
unsigned long addr, int level,
                if (st->current_prot) {
                        note_prot_uxn(st, addr);
                        note_prot_wx(st, addr);
-                       pt_dump_seq_printf(st->seq, "0x%016lx-0x%016lx   ",
-                                  st->start_address, addr);
+               }
 
-                       delta = (addr - st->start_address) >> 10;
-                       while (!(delta & 1023) && unit[1]) {
-                               delta >>= 10;
-                               unit++;
-                       }
-                       pt_dump_seq_printf(st->seq, "%9lu%c %s", delta, *unit,
-                                  pg_level[st->level].name);
-                       if (pg_level[st->level].bits)
-                               dump_prot(st, pg_level[st->level].bits,
-                                         pg_level[st->level].num);
-                       pt_dump_seq_puts(st->seq, "\n");
+               pt_dump_seq_printf(st->seq, "0x%016lx-0x%016lx   ",
+                          st->start_address, addr);
+
+               delta = (addr - st->start_address) >> 10;
+               while (!(delta & 1023) && unit[1]) {
+                       delta >>= 10;
+                       unit++;
                }
+               pt_dump_seq_printf(st->seq, "%9lu%c %s", delta, *unit,
+                          pg_level[st->level].name);
+               if (st->current_prot && pg_level[st->level].bits)
+                       dump_prot(st, pg_level[st->level].bits,
+                                 pg_level[st->level].num);
+               pt_dump_seq_puts(st->seq, "\n");
 
                if (addr >= st->marker[1].start_address) {
                        st->marker++;
-- 
2.20.1

Reply via email to