unsigned int i;
        unsigned long addr;
 
+       addr = st->start_address;
+
        /*
         * Traverse the linux pagetable structure and dump pages that are in
         * 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))
                        /* pgd exists */
                        walk_pud(st, pgd, addr);
 {
        struct pg_state st = {
                .seq = m,
-               .start_address = KERN_VIRT_START,
                .marker = address_markers,
        };
+
+       if (radix_enabled())
+               st.start_address = PAGE_OFFSET;
+       else
+               st.start_address = KERN_VIRT_START;
+
        /* Traverse kernel page tables */
        walk_pagetables(&st);
        note_page(&st, 0, 0, 0);