forked from mirrors/linux
		
	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
					
				
					 5 changed files with 17 additions and 1 deletions
				
			
		|  | @ -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 a new issue
	
	 Steven Price
						Steven Price