This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / arch / mips / mm / pgtable-64.c
index e4b961c..7eb9533 100644 (file)
@@ -52,8 +52,29 @@ void pmd_init(unsigned long addr, unsigned long pagetable)
 
 void __init pagetable_init(void)
 {
+       pmd_t *pmd;
+       pte_t *pte;
+       int i;
+
        /* Initialize the entire pgd.  */
        pgd_init((unsigned long)swapper_pg_dir);
        pmd_init((unsigned long)invalid_pmd_table, (unsigned long)invalid_pte_table);
        memset((void *)invalid_pte_table, 0, sizeof(pte_t) * PTRS_PER_PTE);
+
+       memset((void *)kptbl, 0, PAGE_SIZE << PGD_ORDER);
+       memset((void *)kpmdtbl, 0, PAGE_SIZE);
+       set_pgd(swapper_pg_dir, __pgd((unsigned long)kpmdtbl));
+
+       /*
+        * The 64-bit kernel uses a flat pagetable for it's kernel mappings ...
+        */
+       pmd = kpmdtbl;
+       pte = kptbl;
+       i = 0;
+       while (i < (1 << PGD_ORDER)) {
+               pmd_val(*pmd) = (unsigned long)pte;
+               pte += PTRS_PER_PTE;
+               pmd++;
+               i++;
+       }
 }