mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
x86: remove PG_uncached
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>
This commit is contained in:
parent
02e1960aaf
commit
7a87225ae2
@ -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 |
|
|
||||||
-----------------------
|
|
@ -2100,7 +2100,8 @@ config ARM64_MTE
|
|||||||
depends on ARM64_PAN
|
depends on ARM64_PAN
|
||||||
select ARCH_HAS_SUBPAGE_FAULTS
|
select ARCH_HAS_SUBPAGE_FAULTS
|
||||||
select ARCH_USES_HIGH_VMA_FLAGS
|
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
|
help
|
||||||
Memory Tagging (part of the ARMv8.5 Extensions) provides
|
Memory Tagging (part of the ARMv8.5 Extensions) provides
|
||||||
architectural support for run-time, always-on detection of
|
architectural support for run-time, always-on detection of
|
||||||
|
@ -1799,6 +1799,7 @@ config X86_PAT
|
|||||||
def_bool y
|
def_bool y
|
||||||
prompt "x86 PAT support" if EXPERT
|
prompt "x86 PAT support" if EXPERT
|
||||||
depends on MTRR
|
depends on MTRR
|
||||||
|
select ARCH_USES_PG_ARCH_2
|
||||||
help
|
help
|
||||||
Use PAT attributes to setup page level cache control.
|
Use PAT attributes to setup page level cache control.
|
||||||
|
|
||||||
@ -1810,10 +1811,6 @@ config X86_PAT
|
|||||||
|
|
||||||
If unsure, say Y.
|
If unsure, say Y.
|
||||||
|
|
||||||
config ARCH_USES_PG_UNCACHED
|
|
||||||
def_bool y
|
|
||||||
depends on X86_PAT
|
|
||||||
|
|
||||||
config X86_UMIP
|
config X86_UMIP
|
||||||
def_bool y
|
def_bool y
|
||||||
prompt "User Mode Instruction Prevention" if EXPERT
|
prompt "User Mode Instruction Prevention" if EXPERT
|
||||||
|
@ -104,7 +104,7 @@ __setup("debugpat", pat_debug_setup);
|
|||||||
|
|
||||||
#ifdef CONFIG_X86_PAT
|
#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.
|
* memory type of pages that have backing page struct.
|
||||||
*
|
*
|
||||||
* X86 PAT supports 4 different memory types:
|
* X86 PAT supports 4 different memory types:
|
||||||
@ -118,9 +118,9 @@ __setup("debugpat", pat_debug_setup);
|
|||||||
|
|
||||||
#define _PGMT_WB 0
|
#define _PGMT_WB 0
|
||||||
#define _PGMT_WC (1UL << PG_arch_1)
|
#define _PGMT_WC (1UL << PG_arch_1)
|
||||||
#define _PGMT_UC_MINUS (1UL << PG_uncached)
|
#define _PGMT_UC_MINUS (1UL << PG_arch_2)
|
||||||
#define _PGMT_WT (1UL << PG_uncached | 1UL << PG_arch_1)
|
#define _PGMT_WT (1UL << PG_arch_2 | 1UL << PG_arch_1)
|
||||||
#define _PGMT_MASK (1UL << PG_uncached | 1UL << PG_arch_1)
|
#define _PGMT_MASK (1UL << PG_arch_2 | 1UL << PG_arch_1)
|
||||||
#define _PGMT_CLEAR_MASK (~_PGMT_MASK)
|
#define _PGMT_CLEAR_MASK (~_PGMT_MASK)
|
||||||
|
|
||||||
static inline enum page_cache_mode get_page_memtype(struct page *pg)
|
static inline enum page_cache_mode get_page_memtype(struct page *pg)
|
||||||
|
@ -206,18 +206,16 @@ u64 stable_page_flags(const struct page *page)
|
|||||||
u |= kpf_copy_bit(page->flags, KPF_HWPOISON, PG_hwpoison);
|
u |= kpf_copy_bit(page->flags, KPF_HWPOISON, PG_hwpoison);
|
||||||
#endif
|
#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_RESERVED, PG_reserved);
|
||||||
u |= kpf_copy_bit(k, KPF_OWNER_2, PG_owner_2);
|
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, PG_private);
|
||||||
u |= kpf_copy_bit(k, KPF_PRIVATE_2, PG_private_2);
|
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_OWNER_PRIVATE, PG_owner_priv_1);
|
||||||
u |= kpf_copy_bit(k, KPF_ARCH, PG_arch_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);
|
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);
|
u |= kpf_copy_bit(k, KPF_ARCH_3, PG_arch_3);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
#define KPF_PRIVATE_2 36
|
#define KPF_PRIVATE_2 36
|
||||||
#define KPF_OWNER_PRIVATE 37
|
#define KPF_OWNER_PRIVATE 37
|
||||||
#define KPF_ARCH 38
|
#define KPF_ARCH 38
|
||||||
#define KPF_UNCACHED 39
|
|
||||||
#define KPF_SOFTDIRTY 40
|
#define KPF_SOFTDIRTY 40
|
||||||
#define KPF_ARCH_2 41
|
#define KPF_ARCH_2 41
|
||||||
#define KPF_ARCH_3 42
|
#define KPF_ARCH_3 42
|
||||||
|
@ -113,9 +113,6 @@ enum pageflags {
|
|||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
PG_mlocked, /* Page is vma mlocked */
|
PG_mlocked, /* Page is vma mlocked */
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_USES_PG_UNCACHED
|
|
||||||
PG_uncached, /* Page has been mapped as uncached */
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_MEMORY_FAILURE
|
#ifdef CONFIG_MEMORY_FAILURE
|
||||||
PG_hwpoison, /* hardware poisoned page. Don't touch */
|
PG_hwpoison, /* hardware poisoned page. Don't touch */
|
||||||
#endif
|
#endif
|
||||||
@ -123,8 +120,10 @@ enum pageflags {
|
|||||||
PG_young,
|
PG_young,
|
||||||
PG_idle,
|
PG_idle,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_ARCH_USES_PG_ARCH_X
|
#ifdef CONFIG_ARCH_USES_PG_ARCH_2
|
||||||
PG_arch_2,
|
PG_arch_2,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ARCH_USES_PG_ARCH_3
|
||||||
PG_arch_3,
|
PG_arch_3,
|
||||||
#endif
|
#endif
|
||||||
__NR_PAGEFLAGS,
|
__NR_PAGEFLAGS,
|
||||||
@ -602,12 +601,6 @@ FOLIO_FLAG_FALSE(mlocked)
|
|||||||
FOLIO_TEST_SET_FLAG_FALSE(mlocked)
|
FOLIO_TEST_SET_FLAG_FALSE(mlocked)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_USES_PG_UNCACHED
|
|
||||||
PAGEFLAG(Uncached, uncached, PF_NO_COMPOUND)
|
|
||||||
#else
|
|
||||||
PAGEFLAG_FALSE(Uncached, uncached)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_MEMORY_FAILURE
|
#ifdef CONFIG_MEMORY_FAILURE
|
||||||
PAGEFLAG(HWPoison, hwpoison, PF_ANY)
|
PAGEFLAG(HWPoison, hwpoison, PF_ANY)
|
||||||
TESTSCFLAG(HWPoison, hwpoison, PF_ANY)
|
TESTSCFLAG(HWPoison, hwpoison, PF_ANY)
|
||||||
|
@ -71,12 +71,6 @@
|
|||||||
#define IF_HAVE_PG_MLOCK(_name)
|
#define IF_HAVE_PG_MLOCK(_name)
|
||||||
#endif
|
#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
|
#ifdef CONFIG_MEMORY_FAILURE
|
||||||
#define IF_HAVE_PG_HWPOISON(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
#define IF_HAVE_PG_HWPOISON(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||||
#else
|
#else
|
||||||
@ -89,10 +83,16 @@
|
|||||||
#define IF_HAVE_PG_IDLE(_name)
|
#define IF_HAVE_PG_IDLE(_name)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_USES_PG_ARCH_X
|
#ifdef CONFIG_ARCH_USES_PG_ARCH_2
|
||||||
#define IF_HAVE_PG_ARCH_X(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
#define IF_HAVE_PG_ARCH_2(_name) ,{1UL << PG_##_name, __stringify(_name)}
|
||||||
#else
|
#else
|
||||||
#define IF_HAVE_PG_ARCH_X(_name)
|
#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_3(_name)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DEF_PAGEFLAG_NAME(_name) { 1UL << PG_##_name, __stringify(_name) }
|
#define DEF_PAGEFLAG_NAME(_name) { 1UL << PG_##_name, __stringify(_name) }
|
||||||
@ -118,12 +118,11 @@
|
|||||||
DEF_PAGEFLAG_NAME(swapbacked), \
|
DEF_PAGEFLAG_NAME(swapbacked), \
|
||||||
DEF_PAGEFLAG_NAME(unevictable) \
|
DEF_PAGEFLAG_NAME(unevictable) \
|
||||||
IF_HAVE_PG_MLOCK(mlocked) \
|
IF_HAVE_PG_MLOCK(mlocked) \
|
||||||
IF_HAVE_PG_UNCACHED(uncached) \
|
|
||||||
IF_HAVE_PG_HWPOISON(hwpoison) \
|
IF_HAVE_PG_HWPOISON(hwpoison) \
|
||||||
IF_HAVE_PG_IDLE(idle) \
|
IF_HAVE_PG_IDLE(idle) \
|
||||||
IF_HAVE_PG_IDLE(young) \
|
IF_HAVE_PG_IDLE(young) \
|
||||||
IF_HAVE_PG_ARCH_X(arch_2) \
|
IF_HAVE_PG_ARCH_2(arch_2) \
|
||||||
IF_HAVE_PG_ARCH_X(arch_3)
|
IF_HAVE_PG_ARCH_3(arch_3)
|
||||||
|
|
||||||
#define show_page_flags(flags) \
|
#define show_page_flags(flags) \
|
||||||
(flags) ? __print_flags(flags, "|", \
|
(flags) ? __print_flags(flags, "|", \
|
||||||
|
@ -1079,13 +1079,10 @@ config ARCH_USES_HIGH_VMA_FLAGS
|
|||||||
config ARCH_HAS_PKEYS
|
config ARCH_HAS_PKEYS
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config ARCH_USES_PG_ARCH_X
|
config ARCH_USES_PG_ARCH_2
|
||||||
|
bool
|
||||||
|
config ARCH_USES_PG_ARCH_3
|
||||||
bool
|
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
|
config VM_EVENT_COUNTERS
|
||||||
default y
|
default y
|
||||||
|
@ -2993,8 +2993,10 @@ static void __split_huge_page_tail(struct folio *folio, int tail,
|
|||||||
(1L << PG_workingset) |
|
(1L << PG_workingset) |
|
||||||
(1L << PG_locked) |
|
(1L << PG_locked) |
|
||||||
(1L << PG_unevictable) |
|
(1L << PG_unevictable) |
|
||||||
#ifdef CONFIG_ARCH_USES_PG_ARCH_X
|
#ifdef CONFIG_ARCH_USES_PG_ARCH_2
|
||||||
(1L << PG_arch_2) |
|
(1L << PG_arch_2) |
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_ARCH_USES_PG_ARCH_3
|
||||||
(1L << PG_arch_3) |
|
(1L << PG_arch_3) |
|
||||||
#endif
|
#endif
|
||||||
(1L << PG_dirty) |
|
(1L << PG_dirty) |
|
||||||
|
@ -76,7 +76,7 @@
|
|||||||
#define KPF_PRIVATE_2 36
|
#define KPF_PRIVATE_2 36
|
||||||
#define KPF_OWNER_PRIVATE 37
|
#define KPF_OWNER_PRIVATE 37
|
||||||
#define KPF_ARCH 38
|
#define KPF_ARCH 38
|
||||||
#define KPF_UNCACHED 39
|
#define KPF_UNCACHED 39 /* unused */
|
||||||
#define KPF_SOFTDIRTY 40
|
#define KPF_SOFTDIRTY 40
|
||||||
#define KPF_ARCH_2 41
|
#define KPF_ARCH_2 41
|
||||||
|
|
||||||
@ -134,7 +134,6 @@ static const char * const page_flag_names[] = {
|
|||||||
[KPF_PRIVATE_2] = "p:private_2",
|
[KPF_PRIVATE_2] = "p:private_2",
|
||||||
[KPF_OWNER_PRIVATE] = "O:owner_private",
|
[KPF_OWNER_PRIVATE] = "O:owner_private",
|
||||||
[KPF_ARCH] = "h:arch",
|
[KPF_ARCH] = "h:arch",
|
||||||
[KPF_UNCACHED] = "c:uncached",
|
|
||||||
[KPF_SOFTDIRTY] = "f:softdirty",
|
[KPF_SOFTDIRTY] = "f:softdirty",
|
||||||
[KPF_ARCH_2] = "H:arch_2",
|
[KPF_ARCH_2] = "H:arch_2",
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user