microblaze: use pgtable-nopmd instead of 4level-fixup
[linux-2.6-microblaze.git] / arch / microblaze / mm / pgtable.c
index 010bb9c..68c26ca 100644 (file)
@@ -134,11 +134,16 @@ EXPORT_SYMBOL(iounmap);
 
 int map_page(unsigned long va, phys_addr_t pa, int flags)
 {
+       p4d_t *p4d;
+       pud_t *pud;
        pmd_t *pd;
        pte_t *pg;
        int err = -ENOMEM;
+
        /* Use upper 10 bits of VA to index the first level map */
-       pd = pmd_offset(pgd_offset_k(va), va);
+       p4d = p4d_offset(pgd_offset_k(va), va);
+       pud = pud_offset(p4d, va);
+       pd = pmd_offset(pud, va);
        /* Use middle 10 bits of VA to index the second-level map */
        pg = pte_alloc_kernel(pd, va); /* from powerpc - pgtable.c */
        /* pg = pte_alloc_kernel(&init_mm, pd, va); */
@@ -188,13 +193,17 @@ void __init mapin_ram(void)
 static int get_pteptr(struct mm_struct *mm, unsigned long addr, pte_t **ptep)
 {
        pgd_t   *pgd;
+       p4d_t   *p4d;
+       pud_t   *pud;
        pmd_t   *pmd;
        pte_t   *pte;
        int     retval = 0;
 
        pgd = pgd_offset(mm, addr & PAGE_MASK);
        if (pgd) {
-               pmd = pmd_offset(pgd, addr & PAGE_MASK);
+               p4d = p4d_offset(pgd, addr & PAGE_MASK);
+               pud = pud_offset(p4d, addr & PAGE_MASK);
+               pmd = pmd_offset(pud, addr & PAGE_MASK);
                if (pmd_present(*pmd)) {
                        pte = pte_offset_kernel(pmd, addr & PAGE_MASK);
                        if (pte) {