mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
powerpc/ptdump: Dump PXX level info for kernel_page_tables
This patch adds PGD/PUD/PMD/PTE level information while dumping kernel page tables. Before this patch it was hard to identify which entries belongs to which page table level e.g. ~ # dmesg |grep -i radix [0.000000] radix-mmu: Mapped 0x0000000000000000-0x0000000005400000 with 2.00 MiB pages (exec) [0.000000] radix-mmu: Mapped 0x0000000005400000-0x0000000040000000 with 2.00 MiB pages [0.000000] radix-mmu: Mapped 0x0000000040000000-0x0000000100000000 with 1.00 GiB pages [0.000000] radix-mmu: Initializing Radix MMU Before: ---[ Start of kernel VM ]--- 0xc000000000000000-0xc000000003ffffff XXX 64M r X pte valid present dirty accessed 0xc000000004000000-0xc00000003fffffff XXX 960M r w pte valid present dirty accessed 0xc000000040000000-0xc0000000ffffffff XXX 3G r w pte valid present dirty accessed ... ---[ vmemmap start ]--- 0xc00c000000000000-0xc00c0000003fffff XXX 4M r w pte valid present dirty accessed After: ---[ Start of kernel VM ]--- 0xc000000000000000-0xc000000003ffffff XXX 64M PMD r X pte valid present dirty accessed 0xc000000004000000-0xc00000003fffffff XXX 960M PMD r w pte valid present dirty accessed 0xc000000040000000-0xc0000000ffffffff XXX 3G PUD r w pte valid present dirty accessed ... ---[ vmemmap start ]--- 0xc00c000000000000-0xc00c0000003fffff XXX 4M PMD r w pte valid present dirty accessed Signed-off-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com> Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com> Link: https://patch.msgid.link/95defb675ee5607ef3923a1e6aeac39311b8fad4.1761834163.git.ritesh.list@gmail.com
This commit is contained in:
committed by
Madhavan Srinivasan
parent
6394f0e8ab
commit
3d44be297e
@@ -71,18 +71,23 @@ static const struct flag_info flag_array[] = {
|
||||
|
||||
struct ptdump_pg_level pg_level[5] = {
|
||||
{ /* pgd */
|
||||
.name = "PGD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* p4d */
|
||||
.name = "P4D",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pud */
|
||||
.name = "PUD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pmd */
|
||||
.name = "PMD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pte */
|
||||
.name = "PTE",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
},
|
||||
|
||||
@@ -104,18 +104,23 @@ static const struct flag_info flag_array[] = {
|
||||
|
||||
struct ptdump_pg_level pg_level[5] = {
|
||||
{ /* pgd */
|
||||
.name = "PGD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* p4d */
|
||||
.name = "P4D",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pud */
|
||||
.name = "PUD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pmd */
|
||||
.name = "PMD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pte */
|
||||
.name = "PTE",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
},
|
||||
|
||||
@@ -178,6 +178,7 @@ static void dump_addr(struct pg_state *st, unsigned long addr)
|
||||
pt_dump_seq_printf(st->seq, REG "-" REG " ", st->start_address, addr - 1);
|
||||
pt_dump_seq_printf(st->seq, " " REG " ", st->start_pa);
|
||||
pt_dump_size(st->seq, addr - st->start_address);
|
||||
pt_dump_seq_printf(st->seq, "%s ", pg_level[st->level].name);
|
||||
}
|
||||
|
||||
static void note_prot_wx(struct pg_state *st, unsigned long addr)
|
||||
|
||||
@@ -13,6 +13,7 @@ struct flag_info {
|
||||
|
||||
struct ptdump_pg_level {
|
||||
const struct flag_info *flag;
|
||||
char name[4];
|
||||
size_t num;
|
||||
u64 mask;
|
||||
};
|
||||
|
||||
@@ -69,18 +69,23 @@ static const struct flag_info flag_array[] = {
|
||||
|
||||
struct ptdump_pg_level pg_level[5] = {
|
||||
{ /* pgd */
|
||||
.name = "PGD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* p4d */
|
||||
.name = "P4D",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pud */
|
||||
.name = "PUD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pmd */
|
||||
.name = "PMD",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
}, { /* pte */
|
||||
.name = "PTE",
|
||||
.flag = flag_array,
|
||||
.num = ARRAY_SIZE(flag_array),
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user