arch: simplify architecture specific page size configuration
authorArnd Bergmann <arnd@arndb.de>
Mon, 26 Feb 2024 16:14:12 +0000 (17:14 +0100)
committerArnd Bergmann <arnd@arndb.de>
Wed, 6 Mar 2024 18:29:03 +0000 (19:29 +0100)
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.

Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu> (powerpc32)
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Acked-by: Helge Deller <deller@gmx.de> # parisc
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
arch/arc/Kconfig
arch/arc/include/uapi/asm/page.h
arch/arm64/Kconfig
arch/arm64/include/asm/page-def.h
arch/parisc/Kconfig
arch/parisc/include/asm/page.h
arch/powerpc/Kconfig
arch/powerpc/include/asm/page.h
scripts/gdb/linux/constants.py.in
scripts/gdb/linux/mm.py

index 1b0483c51cc16952d54fc1aa09a8944ccf6510fd..4092bec198beca44d6c019643db6829293f7320d 100644 (file)
@@ -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
index 2a4ad619abfba65fab6d73a5df120a3f615cf890..7fd9e741b5274d505b1cde2eb7fb8d466d635394 100644 (file)
 #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
index aa7c1d435139684d7b56f96f3f93945d331d64d6..29290b8cb36dce29cd8fead0a3b8ee6a63326ee8 100644 (file)
@@ -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"
index 2403f7b4cdbfb63d038b5b3a86cc6570061928fc..792e9fe881dcf51128a15b40cddf55ccd2884dd9 100644 (file)
@@ -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))
 
index 5c845e8d59d92f8cd3594fccf1476503d8957149..b180e684fa0dbe45347def1f5c01c1994de50699 100644 (file)
@@ -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
index 667e703c0e8f695045e1354826a0f41f7c7cdfe0..ad4e15d12ed1c503dd74f78d41410b5d19e692e4 100644 (file)
@@ -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))
 
index b9fc064d38d281f1c32584e79edd705c670b1731..8fad4e5d7ad5d5a6d7c1c00eab65598aa5acd0c1 100644 (file)
@@ -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.
index e5fcc79b5bfba175b56b2783763d8041a355debe..e411e5a70ea39fbeaa653c7f99102a7a08ffb031 100644 (file)
@@ -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__
index e810e0c27ff18d3adc16fda616888e45f6e7d7da..10fadc2387194e1cb1fc19d29c92e8a8fa1f8c6d 100644 (file)
@@ -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)
index ad5641dcb068662c101eae4cbbd9999386db4dda..515730fd4c9d2949a493262043ba4bbb2af340bb 100644 (file)
@@ -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)