]> www.infradead.org Git - users/willy/xarray.git/commitdiff
powerpc/32s: Reduce default size of module/execmem area
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 20 Aug 2024 17:23:54 +0000 (19:23 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 30 Aug 2024 11:29:54 +0000 (21:29 +1000)
book3s/32 platforms have usually more memory than 8xx, but it is still
not worth reserving a full segment (256 Mbytes) for module text.
64Mbytes should be far enough.

Also fix TASK_SIZE when EXECMEM is not selected, and add a build
verification for overlap of module execmem space with user segments.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/c1f6a4e47f177d919561c6e97d31af5564923cf6.1724173828.git.christophe.leroy@csgroup.eu
arch/powerpc/Kconfig
arch/powerpc/include/asm/book3s/32/pgtable.h
arch/powerpc/mm/book3s32/mmu.c

index f050a37aa857ce6e7a6753c9cc75eee93390d856..b9f11c26258259115a4aab05af7a751dc4436ddf 100644 (file)
@@ -1269,23 +1269,24 @@ config TASK_SIZE_BOOL
 config TASK_SIZE
        hex "Size of user task space" if TASK_SIZE_BOOL
        default "0x80000000" if PPC_8xx
-       default "0xb0000000" if PPC_BOOK3S_32
+       default "0xb0000000" if PPC_BOOK3S_32 && EXECMEM
        default "0xc0000000"
 
 config MODULES_SIZE_BOOL
        bool "Set custom size for modules/execmem area"
        depends on EXECMEM && ADVANCED_OPTIONS
-       depends on PPC_8xx
        help
          This option allows you to set the size of kernel virtual address
          space dedicated for modules/execmem.
-         For the time being it is only for 8xx.
+         For the time being it is only for 8xx and book3s/32. Other
+         platform share it with vmalloc space.
 
          Say N here unless you know what you are doing.
 
 config MODULES_SIZE
        int "Size of modules/execmem area (In Mbytes)" if MODULES_SIZE_BOOL
        range 1 256 if EXECMEM
+       default 64 if EXECMEM && PPC_BOOK3S_32
        default 32 if EXECMEM && PPC_8xx
        default 0
 
index 52971ee30717fee683617c70ddfeac313f391e02..42c3af90d1f0ff8f23ddd6511a98a68f5751c1d7 100644 (file)
@@ -196,7 +196,8 @@ void unmap_kernel_page(unsigned long va);
 #endif
 
 #define MODULES_END    ALIGN_DOWN(PAGE_OFFSET, SZ_256M)
-#define MODULES_VADDR  (MODULES_END - SZ_256M)
+#define MODULES_SIZE   (CONFIG_MODULES_SIZE * SZ_1M)
+#define MODULES_VADDR  (MODULES_END - MODULES_SIZE)
 
 #ifndef __ASSEMBLY__
 #include <linux/sched.h>
index 625fe7d08e067bdfe00b1ceebdc92774b2267d9e..2db167f4233f7bb82ace3816c549a920f340a436 100644 (file)
@@ -223,6 +223,8 @@ int mmu_mark_initmem_nx(void)
 
        update_bats();
 
+       BUILD_BUG_ON(ALIGN_DOWN(MODULES_VADDR, SZ_256M) < TASK_SIZE);
+
        for (i = TASK_SIZE >> 28; i < 16; i++) {
                /* Do not set NX on VM space for modules */
                if (is_module_segment(i << 28))