|
@@ -267,12 +267,13 @@ static void walk_pagetables(struct pg_state *st)
|
|
unsigned int i;
|
|
unsigned int i;
|
|
unsigned long addr;
|
|
unsigned long addr;
|
|
|
|
|
|
|
|
+ addr = st->start_address;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Traverse the linux pagetable structure and dump pages that are in
|
|
* Traverse the linux pagetable structure and dump pages that are in
|
|
* the hash pagetable.
|
|
* the hash pagetable.
|
|
*/
|
|
*/
|
|
- for (i = 0; i < PTRS_PER_PGD; i++, pgd++) {
|
|
|
|
- addr = KERN_VIRT_START + i * PGDIR_SIZE;
|
|
|
|
|
|
+ for (i = 0; i < PTRS_PER_PGD; i++, pgd++, addr += PGDIR_SIZE) {
|
|
if (!pgd_none(*pgd) && !pgd_huge(*pgd))
|
|
if (!pgd_none(*pgd) && !pgd_huge(*pgd))
|
|
/* pgd exists */
|
|
/* pgd exists */
|
|
walk_pud(st, pgd, addr);
|
|
walk_pud(st, pgd, addr);
|
|
@@ -321,9 +322,14 @@ static int ptdump_show(struct seq_file *m, void *v)
|
|
{
|
|
{
|
|
struct pg_state st = {
|
|
struct pg_state st = {
|
|
.seq = m,
|
|
.seq = m,
|
|
- .start_address = KERN_VIRT_START,
|
|
|
|
.marker = address_markers,
|
|
.marker = address_markers,
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+ if (radix_enabled())
|
|
|
|
+ st.start_address = PAGE_OFFSET;
|
|
|
|
+ else
|
|
|
|
+ st.start_address = KERN_VIRT_START;
|
|
|
|
+
|
|
/* Traverse kernel page tables */
|
|
/* Traverse kernel page tables */
|
|
walk_pagetables(&st);
|
|
walk_pagetables(&st);
|
|
note_page(&st, 0, 0, 0);
|
|
note_page(&st, 0, 0, 0);
|