Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland...
[sfrench/cifs-2.6.git] / arch / mips / mm / init.c
index dc6830b10fab774fde2a19cdfbdc1b400df14ead..4ee91c9a556fed7f53dfb534cfc8d474392952a7 100644 (file)
@@ -67,8 +67,8 @@ unsigned long setup_zero_pages(void)
 
        page = virt_to_page(empty_zero_page);
        while (page < virt_to_page(empty_zero_page + (PAGE_SIZE << order))) {
-               set_bit(PG_reserved, &page->flags);
-               set_page_count(page, 0);
+               SetPageReserved(page);
+               set_page_count(page, 1);
                page++;
        }
 
@@ -83,7 +83,7 @@ pte_t *kmap_pte;
 pgprot_t kmap_prot;
 
 #define kmap_get_fixmap_pte(vaddr)                                     \
-       pte_offset_kernel(pmd_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr))
+       pte_offset_kernel(pmd_offset(pud_offset(pgd_offset_k(vaddr), (vaddr)), (vaddr)), (vaddr))
 
 static void __init kmap_init(void)
 {
@@ -96,36 +96,42 @@ static void __init kmap_init(void)
        kmap_prot = PAGE_KERNEL;
 }
 
-#ifdef CONFIG_64BIT
-static void __init fixrange_init(unsigned long start, unsigned long end,
+#ifdef CONFIG_32BIT
+void __init fixrange_init(unsigned long start, unsigned long end,
        pgd_t *pgd_base)
 {
        pgd_t *pgd;
+       pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
-       int i, j;
+       int i, j, k;
        unsigned long vaddr;
 
        vaddr = start;
        i = __pgd_offset(vaddr);
-       j = __pmd_offset(vaddr);
+       j = __pud_offset(vaddr);
+       k = __pmd_offset(vaddr);
        pgd = pgd_base + i;
 
        for ( ; (i < PTRS_PER_PGD) && (vaddr != end); pgd++, i++) {
-               pmd = (pmd_t *)pgd;
-               for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
-                       if (pmd_none(*pmd)) {
-                               pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
-                               set_pmd(pmd, __pmd(pte));
-                               if (pte != pte_offset_kernel(pmd, 0))
-                                       BUG();
+               pud = (pud_t *)pgd;
+               for ( ; (j < PTRS_PER_PUD) && (vaddr != end); pud++, j++) {
+                       pmd = (pmd_t *)pud;
+                       for (; (k < PTRS_PER_PMD) && (vaddr != end); pmd++, k++) {
+                               if (pmd_none(*pmd)) {
+                                       pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+                                       set_pmd(pmd, __pmd(pte));
+                                       if (pte != pte_offset_kernel(pmd, 0))
+                                               BUG();
+                               }
+                               vaddr += PMD_SIZE;
                        }
-                       vaddr += PMD_SIZE;
+                       k = 0;
                }
                j = 0;
        }
 }
-#endif /* CONFIG_64BIT */
+#endif /* CONFIG_32BIT */
 #endif /* CONFIG_HIGHMEM */
 
 #ifndef CONFIG_NEED_MULTIPLE_NODES