Skip to content

Commit 45dcd20

Browse files
kirylIngo Molnar
authored andcommitted
x86/mm/dump_pagetables: Fix printout of p4d level
Modify printk_prot() and callers to print out additional page table level correctly. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: linux-arch@vger.kernel.org Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/20170716225954.74185-3-kirill.shutemov@linux.intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
1 parent 3a366f7 commit 45dcd20

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

arch/x86/mm/dump_pagetables.c

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg)
138138
{
139139
pgprotval_t pr = pgprot_val(prot);
140140
static const char * const level_name[] =
141-
{ "cr3", "pgd", "pud", "pmd", "pte" };
141+
{ "cr3", "pgd", "p4d", "pud", "pmd", "pte" };
142142

143143
if (!pgprot_val(prot)) {
144144
/* Not present */
@@ -162,12 +162,12 @@ static void printk_prot(struct seq_file *m, pgprot_t prot, int level, bool dmsg)
162162
pt_dump_cont_printf(m, dmsg, " ");
163163

164164
/* Bit 7 has a different meaning on level 3 vs 4 */
165-
if (level <= 3 && pr & _PAGE_PSE)
165+
if (level <= 4 && pr & _PAGE_PSE)
166166
pt_dump_cont_printf(m, dmsg, "PSE ");
167167
else
168168
pt_dump_cont_printf(m, dmsg, " ");
169-
if ((level == 4 && pr & _PAGE_PAT) ||
170-
((level == 3 || level == 2) && pr & _PAGE_PAT_LARGE))
169+
if ((level == 5 && pr & _PAGE_PAT) ||
170+
((level == 4 || level == 3) && pr & _PAGE_PAT_LARGE))
171171
pt_dump_cont_printf(m, dmsg, "PAT ");
172172
else
173173
pt_dump_cont_printf(m, dmsg, " ");
@@ -298,7 +298,7 @@ static void walk_pte_level(struct seq_file *m, struct pg_state *st, pmd_t addr,
298298
for (i = 0; i < PTRS_PER_PTE; i++) {
299299
prot = pte_flags(*start);
300300
st->current_address = normalize_addr(P + i * PTE_LEVEL_MULT);
301-
note_page(m, st, __pgprot(prot), 4);
301+
note_page(m, st, __pgprot(prot), 5);
302302
start++;
303303
}
304304
}
@@ -317,13 +317,13 @@ static void walk_pmd_level(struct seq_file *m, struct pg_state *st, pud_t addr,
317317
if (!pmd_none(*start)) {
318318
if (pmd_large(*start) || !pmd_present(*start)) {
319319
prot = pmd_flags(*start);
320-
note_page(m, st, __pgprot(prot), 3);
320+
note_page(m, st, __pgprot(prot), 4);
321321
} else {
322322
walk_pte_level(m, st, *start,
323323
P + i * PMD_LEVEL_MULT);
324324
}
325325
} else
326-
note_page(m, st, __pgprot(0), 3);
326+
note_page(m, st, __pgprot(0), 4);
327327
start++;
328328
}
329329
}
@@ -362,13 +362,13 @@ static void walk_pud_level(struct seq_file *m, struct pg_state *st, p4d_t addr,
362362
!pud_already_checked(prev_pud, start, st->check_wx)) {
363363
if (pud_large(*start) || !pud_present(*start)) {
364364
prot = pud_flags(*start);
365-
note_page(m, st, __pgprot(prot), 2);
365+
note_page(m, st, __pgprot(prot), 3);
366366
} else {
367367
walk_pmd_level(m, st, *start,
368368
P + i * PUD_LEVEL_MULT);
369369
}
370370
} else
371-
note_page(m, st, __pgprot(0), 2);
371+
note_page(m, st, __pgprot(0), 3);
372372

373373
prev_pud = start;
374374
start++;

0 commit comments

Comments
 (0)