]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - arch/sh/mm/init.c
sh: stack debugging support.
[mirror_ubuntu-jammy-kernel.git] / arch / sh / mm / init.c
index 77b4a838fe10f494e9c0896c06479f9abb699721..2c6dc3d8df2cdd4c76400590683a89f1d89c81c2 100644 (file)
@@ -9,7 +9,6 @@
  *   Copyright (C) 1995  Linus Torvalds
  */
 
-#include <linux/config.h>
 #include <linux/signal.h>
 #include <linux/sched.h>
 #include <linux/kernel.h>
@@ -81,6 +80,7 @@ void show_mem(void)
 static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
 {
        pgd_t *pgd;
+       pud_t *pud;
        pmd_t *pmd;
        pte_t *pte;
 
@@ -90,7 +90,17 @@ static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
                return;
        }
 
-       pmd = pmd_offset(pgd, addr);
+       pud = pud_offset(pgd, addr);
+       if (pud_none(*pud)) {
+               pmd = (pmd_t *)get_zeroed_page(GFP_ATOMIC);
+               set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE | _PAGE_USER));
+               if (pmd != pmd_offset(pud, 0)) {
+                       pud_ERROR(*pud);
+                       return;
+               }
+       }
+
+       pmd = pmd_offset(pud, addr);
        if (pmd_none(*pmd)) {
                pte = (pte_t *)get_zeroed_page(GFP_ATOMIC);
                set_pmd(pmd, __pmd(__pa(pte) | _KERNPG_TABLE | _PAGE_USER));
@@ -238,8 +248,13 @@ void __init mem_init(void)
         * Setup wrappers for copy/clear_page(), these will get overridden
         * later in the boot process if a better method is available.
         */
+#ifdef CONFIG_MMU
        copy_page = copy_page_slow;
        clear_page = clear_page_slow;
+#else
+       copy_page = copy_page_nommu;
+       clear_page = clear_page_nommu;
+#endif
 
        /* this will put all low memory onto the freelists */
        totalram_pages += free_all_bootmem_node(NODE_DATA(0));