ARC: mm: support 4 levels of page tables
[linux-2.6-microblaze.git] / arch / arc / mm / fault.c
index f5657cb..f899416 100644 (file)
@@ -33,22 +33,28 @@ noinline static int handle_kernel_vaddr_fault(unsigned long address)
        pud_t *pud, *pud_k;
        pmd_t *pmd, *pmd_k;
 
-       pgd = pgd_offset_fast(current->active_mm, address);
+       pgd = pgd_offset(current->active_mm, address);
        pgd_k = pgd_offset_k(address);
 
        if (!pgd_present(*pgd_k))
                goto bad_area;
 
+       set_pgd(pgd, *pgd_k);
+
        p4d = p4d_offset(pgd, address);
        p4d_k = p4d_offset(pgd_k, address);
        if (!p4d_present(*p4d_k))
                goto bad_area;
 
+       set_p4d(p4d, *p4d_k);
+
        pud = pud_offset(p4d, address);
        pud_k = pud_offset(p4d_k, address);
        if (!pud_present(*pud_k))
                goto bad_area;
 
+       set_pud(pud, *pud_k);
+
        pmd = pmd_offset(pud, address);
        pmd_k = pmd_offset(pud_k, address);
        if (!pmd_present(*pmd_k))