nds32: use pgtable-nopmd instead of 4level-fixup
[linux-2.6-microblaze.git] / arch / nds32 / mm / fault.c
index 064ae5d..906dfb2 100644 (file)
@@ -31,6 +31,8 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
        pr_alert("[%08lx] *pgd=%08lx", addr, pgd_val(*pgd));
 
        do {
+               p4d_t *p4d;
+               pud_t *pud;
                pmd_t *pmd;
 
                if (pgd_none(*pgd))
@@ -41,7 +43,9 @@ void show_pte(struct mm_struct *mm, unsigned long addr)
                        break;
                }
 
-               pmd = pmd_offset(pgd, addr);
+               p4d = p4d_offset(pgd, addr);
+               pud = pud_offset(p4d, addr);
+               pmd = pmd_offset(pud, addr);
 #if PTRS_PER_PMD != 1
                pr_alert(", *pmd=%08lx", pmd_val(*pmd));
 #endif
@@ -359,6 +363,7 @@ vmalloc_fault:
 
                unsigned int index = pgd_index(addr);
                pgd_t *pgd, *pgd_k;
+               p4d_t *p4d, *p4d_k;
                pud_t *pud, *pud_k;
                pmd_t *pmd, *pmd_k;
                pte_t *pte_k;
@@ -369,8 +374,13 @@ vmalloc_fault:
                if (!pgd_present(*pgd_k))
                        goto no_context;
 
-               pud = pud_offset(pgd, addr);
-               pud_k = pud_offset(pgd_k, addr);
+               p4d = p4d_offset(pgd, addr);
+               p4d_k = p4d_offset(pgd_k, addr);
+               if (!p4d_present(*p4d_k))
+                       goto no_context;
+
+               pud = pud_offset(p4d, addr);
+               pud_k = pud_offset(p4d_k, addr);
                if (!pud_present(*pud_k))
                        goto no_context;