mirror of
https://github.com/torvalds/linux
synced 2024-09-06 18:01:05 +00:00
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_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_64BIT
|
||||||
|
u |= kpf_copy_bit(k, KPF_ARCH_2, PG_arch_2);
|
||||||
|
#endif
|
||||||
|
|
||||||
return u;
|
return u;
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,5 +17,6 @@
|
||||||
#define KPF_ARCH 38
|
#define KPF_ARCH 38
|
||||||
#define KPF_UNCACHED 39
|
#define KPF_UNCACHED 39
|
||||||
#define KPF_SOFTDIRTY 40
|
#define KPF_SOFTDIRTY 40
|
||||||
|
#define KPF_ARCH_2 41
|
||||||
|
|
||||||
#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
|
#endif /* LINUX_KERNEL_PAGE_FLAGS_H */
|
||||||
|
|
|
@ -135,6 +135,9 @@ enum pageflags {
|
||||||
#if defined(CONFIG_IDLE_PAGE_TRACKING) && defined(CONFIG_64BIT)
|
#if defined(CONFIG_IDLE_PAGE_TRACKING) && defined(CONFIG_64BIT)
|
||||||
PG_young,
|
PG_young,
|
||||||
PG_idle,
|
PG_idle,
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
PG_arch_2,
|
||||||
#endif
|
#endif
|
||||||
__NR_PAGEFLAGS,
|
__NR_PAGEFLAGS,
|
||||||
|
|
||||||
|
|
|
@ -79,6 +79,12 @@
|
||||||
#define IF_HAVE_PG_IDLE(flag,string)
|
#define IF_HAVE_PG_IDLE(flag,string)
|
||||||
#endif
|
#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 \
|
#define __def_pageflag_names \
|
||||||
{1UL << PG_locked, "locked" }, \
|
{1UL << PG_locked, "locked" }, \
|
||||||
{1UL << PG_waiters, "waiters" }, \
|
{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_UNCACHED(PG_uncached, "uncached" ) \
|
||||||
IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \
|
IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \
|
||||||
IF_HAVE_PG_IDLE(PG_young, "young" ) \
|
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) \
|
#define show_page_flags(flags) \
|
||||||
(flags) ? __print_flags(flags, "|", \
|
(flags) ? __print_flags(flags, "|", \
|
||||||
|
|
|
@ -78,6 +78,7 @@
|
||||||
#define KPF_ARCH 38
|
#define KPF_ARCH 38
|
||||||
#define KPF_UNCACHED 39
|
#define KPF_UNCACHED 39
|
||||||
#define KPF_SOFTDIRTY 40
|
#define KPF_SOFTDIRTY 40
|
||||||
|
#define KPF_ARCH_2 41
|
||||||
|
|
||||||
/* [48-] take some arbitrary free slots for expanding overloaded flags
|
/* [48-] take some arbitrary free slots for expanding overloaded flags
|
||||||
* not part of kernel API
|
* not part of kernel API
|
||||||
|
@ -135,6 +136,7 @@ static const char * const page_flag_names[] = {
|
||||||
[KPF_ARCH] = "h:arch",
|
[KPF_ARCH] = "h:arch",
|
||||||
[KPF_UNCACHED] = "c:uncached",
|
[KPF_UNCACHED] = "c:uncached",
|
||||||
[KPF_SOFTDIRTY] = "f:softdirty",
|
[KPF_SOFTDIRTY] = "f:softdirty",
|
||||||
|
[KPF_ARCH_2] = "H:arch_2",
|
||||||
|
|
||||||
[KPF_READAHEAD] = "I:readahead",
|
[KPF_READAHEAD] = "I:readahead",
|
||||||
[KPF_SLOB_FREE] = "P:slob_free",
|
[KPF_SLOB_FREE] = "P:slob_free",
|
||||||
|
|
Loading…
Reference in a new issue