mm: Add PG_arch_2 page flag
For arm64 MTE support it is necessary to be able to mark pages that contain user space visible tags that will need to be saved/restored e.g. when swapped out. To support this add a new arch specific flag (PG_arch_2). This flag is only available on 64-bit architectures due to the limited number of spare page flags on the 32-bit ones. Signed-off-by: Steven Price <steven.price@arm.com> [catalin.marinas@arm.com: use CONFIG_64BIT for guarding this new flag] Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
637ec831ea
commit
4beba9486a
|
@ -217,6 +217,9 @@ u64 stable_page_flags(struct page *page)
|
|||
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_64BIT
|
||||
u |= kpf_copy_bit(k, KPF_ARCH_2, PG_arch_2);
|
||||
#endif
|
||||
|
||||
return u;
|
||||
};
|
||||
|
|
|
@ -17,5 +17,6 @@
|
|||
#define KPF_ARCH 38
|
||||
#define KPF_UNCACHED 39
|
||||
#define KPF_SOFTDIRTY 40
|
||||
#define KPF_ARCH_2 41
|
||||
|
||||
#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
|
||||
|
|
|
@ -135,6 +135,9 @@ enum pageflags {
|
|||
#if defined(CONFIG_IDLE_PAGE_TRACKING) && defined(CONFIG_64BIT)
|
||||
PG_young,
|
||||
PG_idle,
|
||||
#endif
|
||||
#ifdef CONFIG_64BIT
|
||||
PG_arch_2,
|
||||
#endif
|
||||
__NR_PAGEFLAGS,
|
||||
|
||||
|
|
|
@ -79,6 +79,12 @@
|
|||
#define IF_HAVE_PG_IDLE(flag,string)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
#define IF_HAVE_PG_ARCH_2(flag,string) ,{1UL << flag, string}
|
||||
#else
|
||||
#define IF_HAVE_PG_ARCH_2(flag,string)
|
||||
#endif
|
||||
|
||||
#define __def_pageflag_names \
|
||||
{1UL << PG_locked, "locked" }, \
|
||||
{1UL << PG_waiters, "waiters" }, \
|
||||
|
@ -105,7 +111,8 @@ IF_HAVE_PG_MLOCK(PG_mlocked, "mlocked" ) \
|
|||
IF_HAVE_PG_UNCACHED(PG_uncached, "uncached" ) \
|
||||
IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \
|
||||
IF_HAVE_PG_IDLE(PG_young, "young" ) \
|
||||
IF_HAVE_PG_IDLE(PG_idle, "idle" )
|
||||
IF_HAVE_PG_IDLE(PG_idle, "idle" ) \
|
||||
IF_HAVE_PG_ARCH_2(PG_arch_2, "arch_2" )
|
||||
|
||||
#define show_page_flags(flags) \
|
||||
(flags) ? __print_flags(flags, "|", \
|
||||
|
|
|
@ -78,6 +78,7 @@
|
|||
#define KPF_ARCH 38
|
||||
#define KPF_UNCACHED 39
|
||||
#define KPF_SOFTDIRTY 40
|
||||
#define KPF_ARCH_2 41
|
||||
|
||||
/* [48-] take some arbitrary free slots for expanding overloaded flags
|
||||
* not part of kernel API
|
||||
|
@ -135,6 +136,7 @@ static const char * const page_flag_names[] = {
|
|||
[KPF_ARCH] = "h:arch",
|
||||
[KPF_UNCACHED] = "c:uncached",
|
||||
[KPF_SOFTDIRTY] = "f:softdirty",
|
||||
[KPF_ARCH_2] = "H:arch_2",
|
||||
|
||||
[KPF_READAHEAD] = "I:readahead",
|
||||
[KPF_SLOB_FREE] = "P:slob_free",
|
||||
|
|
Loading…
Reference in New Issue