Hi Christophe, > Which hugepd, page table entries can be at any level > and can be of any size. > > Add support for them. > > Signed-off-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> > --- > mm/ptdump.c | 17 +++++++++++++++-- > 1 file changed, 15 insertions(+), 2 deletions(-) > > diff --git a/mm/ptdump.c b/mm/ptdump.c > index 61cd16afb1c8..6efdb8c15a7d 100644 > --- a/mm/ptdump.c > +++ b/mm/ptdump.c > @@ -112,11 +112,24 @@ static int ptdump_pte_entry(pte_t *pte, unsigned long addr, > { > struct ptdump_state *st = walk->private; > pte_t val = ptep_get(pte); > + unsigned long page_size = next - addr; > + int level; > + > + if (page_size >= PGDIR_SIZE) > + level = 0; > + else if (page_size >= P4D_SIZE) > + level = 1; > + else if (page_size >= PUD_SIZE) > + level = 2; > + else if (page_size >= PMD_SIZE) > + level = 3; > + else > + level = 4; > > if (st->effective_prot) > - st->effective_prot(st, 4, pte_val(val)); > + st->effective_prot(st, level, pte_val(val)); > > - st->note_page(st, addr, 4, pte_val(val), PAGE_SIZE); > + st->note_page(st, addr, level, pte_val(val), page_size); It seems to me that passing both level and page_size is a bit redundant, but I guess it does reduce the impact on each arch's code? Kind regards, Daniel > > return 0; > } > -- > 2.25.0