]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
powerpc/32s: Allow mapping with BATs with DEBUG_PAGEALLOC
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 19 May 2020 05:49:28 +0000 (05:49 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 26 May 2020 12:22:23 +0000 (22:22 +1000)
DEBUG_PAGEALLOC only manages RW data.

Text and RO data can still be mapped with BATs.

In order to map with BATs, also enforce data alignment. Set
by default to 256M which is a good compromise for keeping
enough BATs for also KASAN and IMMR.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/fd29c1718ee44d82115d0e835ced808eb4ccbf51.1589866984.git.christophe.leroy@csgroup.eu
arch/powerpc/Kconfig
arch/powerpc/mm/book3s32/mmu.c
arch/powerpc/mm/init_32.c

index fcb0a9ae98726518b578a5dabaf751cf0e404ea5..752deddc9ed9a18dbdb1548fd63eeaf9613bdd48 100644 (file)
@@ -797,6 +797,7 @@ config DATA_SHIFT
        range 17 28 if (STRICT_KERNEL_RWX || DEBUG_PAGEALLOC) && PPC_BOOK3S_32
        range 19 23 if (STRICT_KERNEL_RWX || DEBUG_PAGEALLOC) && PPC_8xx
        default 22 if STRICT_KERNEL_RWX && PPC_BOOK3S_32
+       default 18 if DEBUG_PAGEALLOC && PPC_BOOK3S_32
        default 23 if STRICT_KERNEL_RWX && PPC_8xx
        default 23 if DEBUG_PAGEALLOC && PPC_8xx && PIN_TLB_DATA
        default 19 if DEBUG_PAGEALLOC && PPC_8xx
index a9b2cbc74797737d1bd4b6fd39043f3265851f67..a6dcc708eee39aa779318bb6518fd68bc15d35a8 100644 (file)
@@ -170,6 +170,12 @@ unsigned long __init mmu_mapin_ram(unsigned long base, unsigned long top)
                pr_debug("RAM mapped without BATs\n");
                return base;
        }
+       if (debug_pagealloc_enabled()) {
+               if (base >= border)
+                       return base;
+               if (top >= border)
+                       top = border;
+       }
 
        if (!strict_kernel_rwx_enabled() || base >= border || top <= border)
                return __mmu_mapin_ram(base, top);
index 8977a7c2543dd7ebe155ce3f66e670533fe6d950..36c39bd372564dce06e73a31b3fe57ae28723723 100644 (file)
@@ -99,10 +99,9 @@ static void __init MMU_setup(void)
        if (IS_ENABLED(CONFIG_PPC_8xx))
                return;
 
-       if (debug_pagealloc_enabled()) {
-               __map_without_bats = 1;
+       if (debug_pagealloc_enabled())
                __map_without_ltlbs = 1;
-       }
+
        if (strict_kernel_rwx_enabled())
                __map_without_ltlbs = 1;
 }