[PATCH 2/4] arch: simplify architecture specific page size configuration

Christophe Leroy christophe.leroy at csgroup.eu
Mon Feb 26 11:05:12 PST 2024



Le 26/02/2024 à 17:14, Arnd Bergmann a écrit :
> From: Arnd Bergmann <arnd at arndb.de>
> 
> 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 at arndb.de>

Reviewed-by: Christophe Leroy <christophe.leroy at csgroup.eu> (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)
>   


More information about the linux-riscv mailing list