Le 26/02/2024 à 17:14, Arnd Bergmann a écrit : > From: Arnd Bergmann <arnd@xxxxxxxx> > > arc, arm64, parisc and powerpc all have their own Kconfig symbols > in place of the common CONFIG_PAGE_SIZE_4KB symbols. Change these > so the common symbols are the ones that are actually used, while > leaving the arhcitecture specific ones as the user visible > place for configuring it, to avoid breaking user configs. > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> Reviewed-by: Christophe Leroy <christophe.leroy@xxxxxxxxxx> (powerpc32) > --- > arch/arc/Kconfig | 3 +++ > arch/arc/include/uapi/asm/page.h | 6 ++---- > arch/arm64/Kconfig | 29 +++++++++++++---------------- > arch/arm64/include/asm/page-def.h | 2 +- > arch/parisc/Kconfig | 3 +++ > arch/parisc/include/asm/page.h | 10 +--------- > arch/powerpc/Kconfig | 31 ++++++------------------------- > arch/powerpc/include/asm/page.h | 2 +- > scripts/gdb/linux/constants.py.in | 2 +- > scripts/gdb/linux/mm.py | 2 +- > 10 files changed, 32 insertions(+), 58 deletions(-) > > diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig > index 1b0483c51cc1..4092bec198be 100644 > --- a/arch/arc/Kconfig > +++ b/arch/arc/Kconfig > @@ -284,14 +284,17 @@ choice > > config ARC_PAGE_SIZE_8K > bool "8KB" > + select HAVE_PAGE_SIZE_8KB > help > Choose between 8k vs 16k > > config ARC_PAGE_SIZE_16K > + select HAVE_PAGE_SIZE_16KB > bool "16KB" > > config ARC_PAGE_SIZE_4K > bool "4KB" > + select HAVE_PAGE_SIZE_4KB > depends on ARC_MMU_V3 || ARC_MMU_V4 > > endchoice > diff --git a/arch/arc/include/uapi/asm/page.h b/arch/arc/include/uapi/asm/page.h > index 2a4ad619abfb..7fd9e741b527 100644 > --- a/arch/arc/include/uapi/asm/page.h > +++ b/arch/arc/include/uapi/asm/page.h > @@ -13,10 +13,8 @@ > #include <linux/const.h> > > /* PAGE_SHIFT determines the page size */ > -#if defined(CONFIG_ARC_PAGE_SIZE_16K) > -#define PAGE_SHIFT 14 > -#elif defined(CONFIG_ARC_PAGE_SIZE_4K) > -#define PAGE_SHIFT 12 > +#ifdef __KERNEL__ > +#define PAGE_SHIFT CONFIG_PAGE_SHIFT > #else > /* > * Default 8k > diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig > index aa7c1d435139..29290b8cb36d 100644 > --- a/arch/arm64/Kconfig > +++ b/arch/arm64/Kconfig > @@ -277,27 +277,21 @@ config 64BIT > config MMU > def_bool y > > -config ARM64_PAGE_SHIFT > - int > - default 16 if ARM64_64K_PAGES > - default 14 if ARM64_16K_PAGES > - default 12 > - > config ARM64_CONT_PTE_SHIFT > int > - default 5 if ARM64_64K_PAGES > - default 7 if ARM64_16K_PAGES > + default 5 if PAGE_SIZE_64KB > + default 7 if PAGE_SIZE_16KB > default 4 > > config ARM64_CONT_PMD_SHIFT > int > - default 5 if ARM64_64K_PAGES > - default 5 if ARM64_16K_PAGES > + default 5 if PAGE_SIZE_64KB > + default 5 if PAGE_SIZE_16KB > default 4 > > config ARCH_MMAP_RND_BITS_MIN > - default 14 if ARM64_64K_PAGES > - default 16 if ARM64_16K_PAGES > + default 14 if PAGE_SIZE_64KB > + default 16 if PAGE_SIZE_16KB > default 18 > > # max bits determined by the following formula: > @@ -1259,11 +1253,13 @@ choice > > config ARM64_4K_PAGES > bool "4KB" > + select HAVE_PAGE_SIZE_4KB > help > This feature enables 4KB pages support. > > config ARM64_16K_PAGES > bool "16KB" > + select HAVE_PAGE_SIZE_16KB > help > The system will use 16KB pages support. AArch32 emulation > requires applications compiled with 16K (or a multiple of 16K) > @@ -1271,6 +1267,7 @@ config ARM64_16K_PAGES > > config ARM64_64K_PAGES > bool "64KB" > + select HAVE_PAGE_SIZE_64KB > help > This feature enables 64KB pages support (4KB by default) > allowing only two levels of page tables and faster TLB > @@ -1291,19 +1288,19 @@ choice > > config ARM64_VA_BITS_36 > bool "36-bit" if EXPERT > - depends on ARM64_16K_PAGES > + depends on PAGE_SIZE_16KB > > config ARM64_VA_BITS_39 > bool "39-bit" > - depends on ARM64_4K_PAGES > + depends on PAGE_SIZE_4KB > > config ARM64_VA_BITS_42 > bool "42-bit" > - depends on ARM64_64K_PAGES > + depends on PAGE_SIZE_64KB > > config ARM64_VA_BITS_47 > bool "47-bit" > - depends on ARM64_16K_PAGES > + depends on PAGE_SIZE_16KB > > config ARM64_VA_BITS_48 > bool "48-bit" > diff --git a/arch/arm64/include/asm/page-def.h b/arch/arm64/include/asm/page-def.h > index 2403f7b4cdbf..792e9fe881dc 100644 > --- a/arch/arm64/include/asm/page-def.h > +++ b/arch/arm64/include/asm/page-def.h > @@ -11,7 +11,7 @@ > #include <linux/const.h> > > /* PAGE_SHIFT determines the page size */ > -#define PAGE_SHIFT CONFIG_ARM64_PAGE_SHIFT > +#define PAGE_SHIFT CONFIG_PAGE_SHIFT > #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) > #define PAGE_MASK (~(PAGE_SIZE-1)) > > diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig > index 5c845e8d59d9..b180e684fa0d 100644 > --- a/arch/parisc/Kconfig > +++ b/arch/parisc/Kconfig > @@ -273,6 +273,7 @@ choice > > config PARISC_PAGE_SIZE_4KB > bool "4KB" > + select HAVE_PAGE_SIZE_4KB > help > This lets you select the page size of the kernel. For best > performance, a page size of 16KB is recommended. For best > @@ -288,10 +289,12 @@ config PARISC_PAGE_SIZE_4KB > > config PARISC_PAGE_SIZE_16KB > bool "16KB" > + select HAVE_PAGE_SIZE_16KB > depends on PA8X00 && BROKEN && !KFENCE > > config PARISC_PAGE_SIZE_64KB > bool "64KB" > + select HAVE_PAGE_SIZE_64KB > depends on PA8X00 && BROKEN && !KFENCE > > endchoice > diff --git a/arch/parisc/include/asm/page.h b/arch/parisc/include/asm/page.h > index 667e703c0e8f..ad4e15d12ed1 100644 > --- a/arch/parisc/include/asm/page.h > +++ b/arch/parisc/include/asm/page.h > @@ -4,15 +4,7 @@ > > #include <linux/const.h> > > -#if defined(CONFIG_PARISC_PAGE_SIZE_4KB) > -# define PAGE_SHIFT 12 > -#elif defined(CONFIG_PARISC_PAGE_SIZE_16KB) > -# define PAGE_SHIFT 14 > -#elif defined(CONFIG_PARISC_PAGE_SIZE_64KB) > -# define PAGE_SHIFT 16 > -#else > -# error "unknown default kernel page size" > -#endif > +#define PAGE_SHIFT CONFIG_PAGE_SHIFT > #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) > #define PAGE_MASK (~(PAGE_SIZE-1)) > > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig > index b9fc064d38d2..8fad4e5d7ad5 100644 > --- a/arch/powerpc/Kconfig > +++ b/arch/powerpc/Kconfig > @@ -212,7 +212,7 @@ config PPC > select HAVE_ARCH_HUGE_VMAP if PPC_RADIX_MMU || PPC_8xx > select HAVE_ARCH_JUMP_LABEL > select HAVE_ARCH_JUMP_LABEL_RELATIVE > - select HAVE_ARCH_KASAN if PPC32 && PPC_PAGE_SHIFT <= 14 > + select HAVE_ARCH_KASAN if PPC32 && PAGE_SHIFT <= 14 > select HAVE_ARCH_KASAN if PPC_RADIX_MMU > select HAVE_ARCH_KASAN if PPC_BOOK3E_64 > select HAVE_ARCH_KASAN_VMALLOC if HAVE_ARCH_KASAN > @@ -809,19 +809,23 @@ choice > config PPC_4K_PAGES > bool "4k page size" > select HAVE_ARCH_SOFT_DIRTY if PPC_BOOK3S_64 > + select HAVE_PAGE_SIZE_4KB > > config PPC_16K_PAGES > bool "16k page size" > depends on 44x || PPC_8xx > + select HAVE_PAGE_SIZE_16KB > > config PPC_64K_PAGES > bool "64k page size" > depends on 44x || PPC_BOOK3S_64 > select HAVE_ARCH_SOFT_DIRTY if PPC_BOOK3S_64 > + select HAVE_PAGE_SIZE_64KB > > config PPC_256K_PAGES > bool "256k page size (Requires non-standard binutils settings)" > depends on 44x && !PPC_47x > + select HAVE_PAGE_SIZE_256KB > help > Make the page size 256k. > > @@ -832,29 +836,6 @@ config PPC_256K_PAGES > > endchoice > > -config PAGE_SIZE_4KB > - def_bool y > - depends on PPC_4K_PAGES > - > -config PAGE_SIZE_16KB > - def_bool y > - depends on PPC_16K_PAGES > - > -config PAGE_SIZE_64KB > - def_bool y > - depends on PPC_64K_PAGES > - > -config PAGE_SIZE_256KB > - def_bool y > - depends on PPC_256K_PAGES > - > -config PPC_PAGE_SHIFT > - int > - default 18 if PPC_256K_PAGES > - default 16 if PPC_64K_PAGES > - default 14 if PPC_16K_PAGES > - default 12 > - > config THREAD_SHIFT > int "Thread shift" if EXPERT > range 13 15 > @@ -891,7 +872,7 @@ config DATA_SHIFT > default 23 if (DEBUG_PAGEALLOC || KFENCE) && PPC_8xx && PIN_TLB_DATA > default 19 if (DEBUG_PAGEALLOC || KFENCE) && PPC_8xx > default 24 if STRICT_KERNEL_RWX && PPC_85xx > - default PPC_PAGE_SHIFT > + default PAGE_SHIFT > help > On Book3S 32 (603+), DBATs are used to map kernel text and rodata RO. > Smaller is the alignment, greater is the number of necessary DBATs. > diff --git a/arch/powerpc/include/asm/page.h b/arch/powerpc/include/asm/page.h > index e5fcc79b5bfb..e411e5a70ea3 100644 > --- a/arch/powerpc/include/asm/page.h > +++ b/arch/powerpc/include/asm/page.h > @@ -21,7 +21,7 @@ > * page size. When using 64K pages however, whether we are really supporting > * 64K pages in HW or not is irrelevant to those definitions. > */ > -#define PAGE_SHIFT CONFIG_PPC_PAGE_SHIFT > +#define PAGE_SHIFT CONFIG_PAGE_SHIFT > #define PAGE_SIZE (ASM_CONST(1) << PAGE_SHIFT) > > #ifndef __ASSEMBLY__ > diff --git a/scripts/gdb/linux/constants.py.in b/scripts/gdb/linux/constants.py.in > index e810e0c27ff1..10fadc238719 100644 > --- a/scripts/gdb/linux/constants.py.in > +++ b/scripts/gdb/linux/constants.py.in > @@ -139,7 +139,7 @@ LX_CONFIG(CONFIG_ARM64_64K_PAGES) > if IS_BUILTIN(CONFIG_ARM64): > LX_VALUE(CONFIG_ARM64_PA_BITS) > LX_VALUE(CONFIG_ARM64_VA_BITS) > - LX_VALUE(CONFIG_ARM64_PAGE_SHIFT) > + LX_VALUE(CONFIG_PAGE_SHIFT) > LX_VALUE(CONFIG_ARCH_FORCE_MAX_ORDER) > LX_CONFIG(CONFIG_SPARSEMEM) > LX_CONFIG(CONFIG_SPARSEMEM_EXTREME) > diff --git a/scripts/gdb/linux/mm.py b/scripts/gdb/linux/mm.py > index ad5641dcb068..515730fd4c9d 100644 > --- a/scripts/gdb/linux/mm.py > +++ b/scripts/gdb/linux/mm.py > @@ -41,7 +41,7 @@ class aarch64_page_ops(): > self.SECTION_SIZE_BITS = 27 > self.MAX_PHYSMEM_BITS = constants.LX_CONFIG_ARM64_VA_BITS > > - self.PAGE_SHIFT = constants.LX_CONFIG_ARM64_PAGE_SHIFT > + self.PAGE_SHIFT = constants.LX_CONFIG_PAGE_SHIFT > self.PAGE_SIZE = 1 << self.PAGE_SHIFT > self.PAGE_MASK = (~(self.PAGE_SIZE - 1)) & ((1 << 64) - 1) >