]> www.infradead.org Git - users/willy/xarray.git/commitdiff
powerpc/8xx: Reduce default size of module/execmem area
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 20 Aug 2024 17:23:50 +0000 (19:23 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Fri, 30 Aug 2024 11:29:53 +0000 (21:29 +1000)
8xx boards don't have much memory, the two I know have respectively
32Mbytes and 128Mbytes, so there is no point in having 256 Mbytes of
memory for module text.

Reduce it to 32Mbytes for 8xx, that's more than enough.

Nevertheless, make it a configurable value so that it can be customised
if needed.

Also add a build verification for overlap of module execmem space
with user PMD.

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

index 3c202785a1464d178e02a6c2aa1ebed62c63924a..f050a37aa857ce6e7a6753c9cc75eee93390d856 100644 (file)
@@ -1271,6 +1271,24 @@ config TASK_SIZE
        default "0x80000000" if PPC_8xx
        default "0xb0000000" if PPC_BOOK3S_32
        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.
+
+         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 32 if EXECMEM && PPC_8xx
+       default 0
+
 endmenu
 
 if PPC64
index a756a1e59c54d06ad4692c0f3a8019d23b505fc8..2986f9ba40b88b57f1215f2fcdf6ad5b53a041ed 100644 (file)
 
 #define mmu_linear_psize       MMU_PAGE_8M
 
-#define MODULES_VADDR  (PAGE_OFFSET - SZ_256M)
 #define MODULES_END    PAGE_OFFSET
+#define MODULES_SIZE   (CONFIG_MODULES_SIZE * SZ_1M)
+#define MODULES_VADDR  (MODULES_END - MODULES_SIZE)
 
 #ifndef __ASSEMBLY__
 
index 4c2f9d7169936c3de3e26eddaf4a413f13c06b6f..8b54f12d1889b75780f15d3d4ef14accff4bc73a 100644 (file)
@@ -207,6 +207,8 @@ void __init setup_initial_memory_limit(phys_addr_t first_memblock_base,
 
        /* 8xx can only access 32MB at the moment */
        memblock_set_current_limit(min_t(u64, first_memblock_size, SZ_32M));
+
+       BUILD_BUG_ON(ALIGN_DOWN(MODULES_VADDR, PGDIR_SIZE) < TASK_SIZE);
 }
 
 int pud_clear_huge(pud_t *pud)