powerpc/32s: Reduce default size of module/execmem area

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
This commit is contained in:
Christophe Leroy 2024-08-20 19:23:54 +02:00 committed by Michael Ellerman
parent ac9f97ff8b
commit 2f2b9a3adc
3 changed files with 8 additions and 4 deletions

View File

@ -1269,23 +1269,24 @@ config TASK_SIZE_BOOL
config TASK_SIZE config TASK_SIZE
hex "Size of user task space" if TASK_SIZE_BOOL hex "Size of user task space" if TASK_SIZE_BOOL
default "0x80000000" if PPC_8xx default "0x80000000" if PPC_8xx
default "0xb0000000" if PPC_BOOK3S_32 default "0xb0000000" if PPC_BOOK3S_32 && EXECMEM
default "0xc0000000" default "0xc0000000"
config MODULES_SIZE_BOOL config MODULES_SIZE_BOOL
bool "Set custom size for modules/execmem area" bool "Set custom size for modules/execmem area"
depends on EXECMEM && ADVANCED_OPTIONS depends on EXECMEM && ADVANCED_OPTIONS
depends on PPC_8xx
help help
This option allows you to set the size of kernel virtual address This option allows you to set the size of kernel virtual address
space dedicated for modules/execmem. 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. Say N here unless you know what you are doing.
config MODULES_SIZE config MODULES_SIZE
int "Size of modules/execmem area (In Mbytes)" if MODULES_SIZE_BOOL int "Size of modules/execmem area (In Mbytes)" if MODULES_SIZE_BOOL
range 1 256 if EXECMEM range 1 256 if EXECMEM
default 64 if EXECMEM && PPC_BOOK3S_32
default 32 if EXECMEM && PPC_8xx default 32 if EXECMEM && PPC_8xx
default 0 default 0

View File

@ -196,7 +196,8 @@ void unmap_kernel_page(unsigned long va);
#endif #endif
#define MODULES_END ALIGN_DOWN(PAGE_OFFSET, SZ_256M) #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__ #ifndef __ASSEMBLY__
#include <linux/sched.h> #include <linux/sched.h>

View File

@ -223,6 +223,8 @@ int mmu_mark_initmem_nx(void)
update_bats(); update_bats();
BUILD_BUG_ON(ALIGN_DOWN(MODULES_VADDR, SZ_256M) < TASK_SIZE);
for (i = TASK_SIZE >> 28; i < 16; i++) { for (i = TASK_SIZE >> 28; i < 16; i++) {
/* Do not set NX on VM space for modules */ /* Do not set NX on VM space for modules */
if (is_module_segment(i << 28)) if (is_module_segment(i << 28))