x86: remove PG_uncached
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 21 Aug 2024 19:34:43 +0000 (20:34 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Wed, 4 Sep 2024 04:15:46 +0000 (21:15 -0700)
Convert x86 to use PG_arch_2 instead of PG_uncached and remove
PG_uncached.

Link: https://lkml.kernel.org/r/20240821193445.2294269-11-willy@infradead.org
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Documentation/features/vm/PG_uncached/arch-support.txt [deleted file]
arch/arm64/Kconfig
arch/x86/Kconfig
arch/x86/mm/pat/memtype.c
fs/proc/page.c
include/linux/kernel-page-flags.h
include/linux/page-flags.h
include/trace/events/mmflags.h
mm/Kconfig
mm/huge_memory.c
tools/mm/page-types.c

diff --git a/Documentation/features/vm/PG_uncached/arch-support.txt b/Documentation/features/vm/PG_uncached/arch-support.txt
deleted file mode 100644 (file)
index 5a7508b..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Feature name:          PG_uncached
-#         Kconfig:       ARCH_USES_PG_UNCACHED
-#         description:   arch supports the PG_uncached page flag
-#
-    -----------------------
-    |         arch |status|
-    -----------------------
-    |       alpha: | TODO |
-    |         arc: | TODO |
-    |         arm: | TODO |
-    |       arm64: | TODO |
-    |        csky: | TODO |
-    |     hexagon: | TODO |
-    |   loongarch: | TODO |
-    |        m68k: | TODO |
-    |  microblaze: | TODO |
-    |        mips: | TODO |
-    |       nios2: | TODO |
-    |    openrisc: | TODO |
-    |      parisc: | TODO |
-    |     powerpc: | TODO |
-    |       riscv: | TODO |
-    |        s390: | TODO |
-    |          sh: | TODO |
-    |       sparc: | TODO |
-    |          um: | TODO |
-    |         x86: |  ok  |
-    |      xtensa: | TODO |
-    -----------------------
index a2f8ff3..6494848 100644 (file)
@@ -2100,7 +2100,8 @@ config ARM64_MTE
        depends on ARM64_PAN
        select ARCH_HAS_SUBPAGE_FAULTS
        select ARCH_USES_HIGH_VMA_FLAGS
-       select ARCH_USES_PG_ARCH_X
+       select ARCH_USES_PG_ARCH_2
+       select ARCH_USES_PG_ARCH_3
        help
          Memory Tagging (part of the ARMv8.5 Extensions) provides
          architectural support for run-time, always-on detection of
index acd9745..b74b9ee 100644 (file)
@@ -1799,6 +1799,7 @@ config X86_PAT
        def_bool y
        prompt "x86 PAT support" if EXPERT
        depends on MTRR
+       select ARCH_USES_PG_ARCH_2
        help
          Use PAT attributes to setup page level cache control.
 
@@ -1810,10 +1811,6 @@ config X86_PAT
 
          If unsure, say Y.
 
-config ARCH_USES_PG_UNCACHED
-       def_bool y
-       depends on X86_PAT
-
 config X86_UMIP
        def_bool y
        prompt "User Mode Instruction Prevention" if EXPERT
index bdc2a24..1fa0bf6 100644 (file)
@@ -104,7 +104,7 @@ __setup("debugpat", pat_debug_setup);
 
 #ifdef CONFIG_X86_PAT
 /*
- * X86 PAT uses page flags arch_1 and uncached together to keep track of
+ * X86 PAT uses page flags arch_1 and arch_2 together to keep track of
  * memory type of pages that have backing page struct.
  *
  * X86 PAT supports 4 different memory types:
@@ -118,9 +118,9 @@ __setup("debugpat", pat_debug_setup);
 
 #define _PGMT_WB               0
 #define _PGMT_WC               (1UL << PG_arch_1)
-#define _PGMT_UC_MINUS         (1UL << PG_uncached)
-#define _PGMT_WT               (1UL << PG_uncached | 1UL << PG_arch_1)
-#define _PGMT_MASK             (1UL << PG_uncached | 1UL << PG_arch_1)
+#define _PGMT_UC_MINUS         (1UL << PG_arch_2)
+#define _PGMT_WT               (1UL << PG_arch_2 | 1UL << PG_arch_1)
+#define _PGMT_MASK             (1UL << PG_arch_2 | 1UL << PG_arch_1)
 #define _PGMT_CLEAR_MASK       (~_PGMT_MASK)
 
 static inline enum page_cache_mode get_page_memtype(struct page *pg)
index e74e639..a55f5ac 100644 (file)
@@ -206,18 +206,16 @@ u64 stable_page_flags(const struct page *page)
                u |= kpf_copy_bit(page->flags, KPF_HWPOISON,    PG_hwpoison);
 #endif
 
-#ifdef CONFIG_ARCH_USES_PG_UNCACHED
-       u |= kpf_copy_bit(k, KPF_UNCACHED,      PG_uncached);
-#endif
-
        u |= kpf_copy_bit(k, KPF_RESERVED,      PG_reserved);
        u |= kpf_copy_bit(k, KPF_OWNER_2,       PG_owner_2);
        u |= kpf_copy_bit(k, KPF_PRIVATE,       PG_private);
        u |= kpf_copy_bit(k, KPF_PRIVATE_2,     PG_private_2);
        u |= kpf_copy_bit(k, KPF_OWNER_PRIVATE, PG_owner_priv_1);
        u |= kpf_copy_bit(k, KPF_ARCH,          PG_arch_1);
-#ifdef CONFIG_ARCH_USES_PG_ARCH_X
+#ifdef CONFIG_ARCH_USES_PG_ARCH_2
        u |= kpf_copy_bit(k, KPF_ARCH_2,        PG_arch_2);
+#endif
+#ifdef CONFIG_ARCH_USES_PG_ARCH_3
        u |= kpf_copy_bit(k, KPF_ARCH_3,        PG_arch_3);
 #endif
 
index 7c587a7..196778a 100644 (file)
@@ -15,7 +15,6 @@
 #define KPF_PRIVATE_2          36
 #define KPF_OWNER_PRIVATE      37
 #define KPF_ARCH               38
-#define KPF_UNCACHED           39
 #define KPF_SOFTDIRTY          40
 #define KPF_ARCH_2             41
 #define KPF_ARCH_3             42
index 1ff3d17..2175ebc 100644 (file)
@@ -113,9 +113,6 @@ enum pageflags {
 #ifdef CONFIG_MMU
        PG_mlocked,             /* Page is vma mlocked */
 #endif
-#ifdef CONFIG_ARCH_USES_PG_UNCACHED
-       PG_uncached,            /* Page has been mapped as uncached */
-#endif
 #ifdef CONFIG_MEMORY_FAILURE
        PG_hwpoison,            /* hardware poisoned page. Don't touch */
 #endif
@@ -123,8 +120,10 @@ enum pageflags {
        PG_young,
        PG_idle,
 #endif
-#ifdef CONFIG_ARCH_USES_PG_ARCH_X
+#ifdef CONFIG_ARCH_USES_PG_ARCH_2
        PG_arch_2,
+#endif
+#ifdef CONFIG_ARCH_USES_PG_ARCH_3
        PG_arch_3,
 #endif
        __NR_PAGEFLAGS,
@@ -602,12 +601,6 @@ FOLIO_FLAG_FALSE(mlocked)
        FOLIO_TEST_SET_FLAG_FALSE(mlocked)
 #endif
 
-#ifdef CONFIG_ARCH_USES_PG_UNCACHED
-PAGEFLAG(Uncached, uncached, PF_NO_COMPOUND)
-#else
-PAGEFLAG_FALSE(Uncached, uncached)
-#endif
-
 #ifdef CONFIG_MEMORY_FAILURE
 PAGEFLAG(HWPoison, hwpoison, PF_ANY)
 TESTSCFLAG(HWPoison, hwpoison, PF_ANY)
index 3b51558..58f2699 100644 (file)
 #define IF_HAVE_PG_MLOCK(_name)
 #endif
 
-#ifdef CONFIG_ARCH_USES_PG_UNCACHED
-#define IF_HAVE_PG_UNCACHED(_name) ,{1UL << PG_##_name, __stringify(_name)}
-#else
-#define IF_HAVE_PG_UNCACHED(_name)
-#endif
-
 #ifdef CONFIG_MEMORY_FAILURE
 #define IF_HAVE_PG_HWPOISON(_name) ,{1UL << PG_##_name, __stringify(_name)}
 #else
 #define IF_HAVE_PG_IDLE(_name)
 #endif
 
-#ifdef CONFIG_ARCH_USES_PG_ARCH_X
-#define IF_HAVE_PG_ARCH_X(_name) ,{1UL << PG_##_name, __stringify(_name)}
+#ifdef CONFIG_ARCH_USES_PG_ARCH_2
+#define IF_HAVE_PG_ARCH_2(_name) ,{1UL << PG_##_name, __stringify(_name)}
+#else
+#define IF_HAVE_PG_ARCH_2(_name)
+#endif
+
+#ifdef CONFIG_ARCH_USES_PG_ARCH_3
+#define IF_HAVE_PG_ARCH_3(_name) ,{1UL << PG_##_name, __stringify(_name)}
 #else
-#define IF_HAVE_PG_ARCH_X(_name)
+#define IF_HAVE_PG_ARCH_3(_name)
 #endif
 
 #define DEF_PAGEFLAG_NAME(_name) { 1UL <<  PG_##_name, __stringify(_name) }
        DEF_PAGEFLAG_NAME(swapbacked),                                  \
        DEF_PAGEFLAG_NAME(unevictable)                                  \
 IF_HAVE_PG_MLOCK(mlocked)                                              \
-IF_HAVE_PG_UNCACHED(uncached)                                          \
 IF_HAVE_PG_HWPOISON(hwpoison)                                          \
 IF_HAVE_PG_IDLE(idle)                                                  \
 IF_HAVE_PG_IDLE(young)                                                 \
-IF_HAVE_PG_ARCH_X(arch_2)                                              \
-IF_HAVE_PG_ARCH_X(arch_3)
+IF_HAVE_PG_ARCH_2(arch_2)                                              \
+IF_HAVE_PG_ARCH_3(arch_3)
 
 #define show_page_flags(flags)                                         \
        (flags) ? __print_flags(flags, "|",                             \
index 5946dcd..8078a4b 100644 (file)
@@ -1079,13 +1079,10 @@ config ARCH_USES_HIGH_VMA_FLAGS
 config ARCH_HAS_PKEYS
        bool
 
-config ARCH_USES_PG_ARCH_X
+config ARCH_USES_PG_ARCH_2
+       bool
+config ARCH_USES_PG_ARCH_3
        bool
-       help
-         Enable the definition of PG_arch_x page flags with x > 1. Only
-         suitable for 64-bit architectures with CONFIG_FLATMEM or
-         CONFIG_SPARSEMEM_VMEMMAP enabled, otherwise there may not be
-         enough room for additional bits in page->flags.
 
 config VM_EVENT_COUNTERS
        default y
index 8dfb912..c4b45ad 100644 (file)
@@ -2993,8 +2993,10 @@ static void __split_huge_page_tail(struct folio *folio, int tail,
                         (1L << PG_workingset) |
                         (1L << PG_locked) |
                         (1L << PG_unevictable) |
-#ifdef CONFIG_ARCH_USES_PG_ARCH_X
+#ifdef CONFIG_ARCH_USES_PG_ARCH_2
                         (1L << PG_arch_2) |
+#endif
+#ifdef CONFIG_ARCH_USES_PG_ARCH_3
                         (1L << PG_arch_3) |
 #endif
                         (1L << PG_dirty) |
index 8ca41c4..fa050d5 100644 (file)
@@ -76,7 +76,7 @@
 #define KPF_PRIVATE_2          36
 #define KPF_OWNER_PRIVATE      37
 #define KPF_ARCH               38
-#define KPF_UNCACHED           39
+#define KPF_UNCACHED           39      /* unused */
 #define KPF_SOFTDIRTY          40
 #define KPF_ARCH_2             41
 
@@ -134,7 +134,6 @@ static const char * const page_flag_names[] = {
        [KPF_PRIVATE_2]         = "p:private_2",
        [KPF_OWNER_PRIVATE]     = "O:owner_private",
        [KPF_ARCH]              = "h:arch",
-       [KPF_UNCACHED]          = "c:uncached",
        [KPF_SOFTDIRTY]         = "f:softdirty",
        [KPF_ARCH_2]            = "H:arch_2",