mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 00:28:52 +02:00 
			
		
		
		
	mm: enumerate all gfp flags
Introduce GFP bits enumeration to let compiler track the number of used bits (which depends on the config options) instead of hardcoding them. That simplifies __GFP_BITS_SHIFT calculation. Link: https://lkml.kernel.org/r/20240224015800.2569851-1-surenb@google.com Suggested-by: Petr Tesařík <petr@tesarici.cz> Signed-off-by: Suren Baghdasaryan <surenb@google.com> Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Acked-by: Michal Hocko <mhocko@suse.com> Cc: Kent Overstreet <kent.overstreet@linux.dev> Cc: Petr Tesarik <petr@tesarici.cz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									2864f3d0f5
								
							
						
					
					
						commit
						772dd03427
					
				
					 1 changed files with 64 additions and 30 deletions
				
			
		|  | @ -21,44 +21,78 @@ typedef unsigned int __bitwise gfp_t; | |||
|  * include/trace/events/mmflags.h and tools/perf/builtin-kmem.c | ||||
|  */ | ||||
| 
 | ||||
| /* Plain integer GFP bitmasks. Do not use this directly. */ | ||||
| #define ___GFP_DMA		0x01u | ||||
| #define ___GFP_HIGHMEM		0x02u | ||||
| #define ___GFP_DMA32		0x04u | ||||
| #define ___GFP_MOVABLE		0x08u | ||||
| #define ___GFP_RECLAIMABLE	0x10u | ||||
| #define ___GFP_HIGH		0x20u | ||||
| #define ___GFP_IO		0x40u | ||||
| #define ___GFP_FS		0x80u | ||||
| #define ___GFP_ZERO		0x100u | ||||
| /* 0x200u unused */ | ||||
| #define ___GFP_DIRECT_RECLAIM	0x400u | ||||
| #define ___GFP_KSWAPD_RECLAIM	0x800u | ||||
| #define ___GFP_WRITE		0x1000u | ||||
| #define ___GFP_NOWARN		0x2000u | ||||
| #define ___GFP_RETRY_MAYFAIL	0x4000u | ||||
| #define ___GFP_NOFAIL		0x8000u | ||||
| #define ___GFP_NORETRY		0x10000u | ||||
| #define ___GFP_MEMALLOC		0x20000u | ||||
| #define ___GFP_COMP		0x40000u | ||||
| #define ___GFP_NOMEMALLOC	0x80000u | ||||
| #define ___GFP_HARDWALL		0x100000u | ||||
| #define ___GFP_THISNODE		0x200000u | ||||
| #define ___GFP_ACCOUNT		0x400000u | ||||
| #define ___GFP_ZEROTAGS		0x800000u | ||||
| enum { | ||||
| 	___GFP_DMA_BIT, | ||||
| 	___GFP_HIGHMEM_BIT, | ||||
| 	___GFP_DMA32_BIT, | ||||
| 	___GFP_MOVABLE_BIT, | ||||
| 	___GFP_RECLAIMABLE_BIT, | ||||
| 	___GFP_HIGH_BIT, | ||||
| 	___GFP_IO_BIT, | ||||
| 	___GFP_FS_BIT, | ||||
| 	___GFP_ZERO_BIT, | ||||
| 	___GFP_UNUSED_BIT,	/* 0x200u unused */ | ||||
| 	___GFP_DIRECT_RECLAIM_BIT, | ||||
| 	___GFP_KSWAPD_RECLAIM_BIT, | ||||
| 	___GFP_WRITE_BIT, | ||||
| 	___GFP_NOWARN_BIT, | ||||
| 	___GFP_RETRY_MAYFAIL_BIT, | ||||
| 	___GFP_NOFAIL_BIT, | ||||
| 	___GFP_NORETRY_BIT, | ||||
| 	___GFP_MEMALLOC_BIT, | ||||
| 	___GFP_COMP_BIT, | ||||
| 	___GFP_NOMEMALLOC_BIT, | ||||
| 	___GFP_HARDWALL_BIT, | ||||
| 	___GFP_THISNODE_BIT, | ||||
| 	___GFP_ACCOUNT_BIT, | ||||
| 	___GFP_ZEROTAGS_BIT, | ||||
| #ifdef CONFIG_KASAN_HW_TAGS | ||||
| #define ___GFP_SKIP_ZERO	0x1000000u | ||||
| #define ___GFP_SKIP_KASAN	0x2000000u | ||||
| 	___GFP_SKIP_ZERO_BIT, | ||||
| 	___GFP_SKIP_KASAN_BIT, | ||||
| #endif | ||||
| #ifdef CONFIG_LOCKDEP | ||||
| 	___GFP_NOLOCKDEP_BIT, | ||||
| #endif | ||||
| 	___GFP_LAST_BIT | ||||
| }; | ||||
| 
 | ||||
| /* Plain integer GFP bitmasks. Do not use this directly. */ | ||||
| #define ___GFP_DMA		BIT(___GFP_DMA_BIT) | ||||
| #define ___GFP_HIGHMEM		BIT(___GFP_HIGHMEM_BIT) | ||||
| #define ___GFP_DMA32		BIT(___GFP_DMA32_BIT) | ||||
| #define ___GFP_MOVABLE		BIT(___GFP_MOVABLE_BIT) | ||||
| #define ___GFP_RECLAIMABLE	BIT(___GFP_RECLAIMABLE_BIT) | ||||
| #define ___GFP_HIGH		BIT(___GFP_HIGH_BIT) | ||||
| #define ___GFP_IO		BIT(___GFP_IO_BIT) | ||||
| #define ___GFP_FS		BIT(___GFP_FS_BIT) | ||||
| #define ___GFP_ZERO		BIT(___GFP_ZERO_BIT) | ||||
| /* 0x200u unused */ | ||||
| #define ___GFP_DIRECT_RECLAIM	BIT(___GFP_DIRECT_RECLAIM_BIT) | ||||
| #define ___GFP_KSWAPD_RECLAIM	BIT(___GFP_KSWAPD_RECLAIM_BIT) | ||||
| #define ___GFP_WRITE		BIT(___GFP_WRITE_BIT) | ||||
| #define ___GFP_NOWARN		BIT(___GFP_NOWARN_BIT) | ||||
| #define ___GFP_RETRY_MAYFAIL	BIT(___GFP_RETRY_MAYFAIL_BIT) | ||||
| #define ___GFP_NOFAIL		BIT(___GFP_NOFAIL_BIT) | ||||
| #define ___GFP_NORETRY		BIT(___GFP_NORETRY_BIT) | ||||
| #define ___GFP_MEMALLOC		BIT(___GFP_MEMALLOC_BIT) | ||||
| #define ___GFP_COMP		BIT(___GFP_COMP_BIT) | ||||
| #define ___GFP_NOMEMALLOC	BIT(___GFP_NOMEMALLOC_BIT) | ||||
| #define ___GFP_HARDWALL		BIT(___GFP_HARDWALL_BIT) | ||||
| #define ___GFP_THISNODE		BIT(___GFP_THISNODE_BIT) | ||||
| #define ___GFP_ACCOUNT		BIT(___GFP_ACCOUNT_BIT) | ||||
| #define ___GFP_ZEROTAGS		BIT(___GFP_ZEROTAGS_BIT) | ||||
| #ifdef CONFIG_KASAN_HW_TAGS | ||||
| #define ___GFP_SKIP_ZERO	BIT(___GFP_SKIP_ZERO_BIT) | ||||
| #define ___GFP_SKIP_KASAN	BIT(___GFP_SKIP_KASAN_BIT) | ||||
| #else | ||||
| #define ___GFP_SKIP_ZERO	0 | ||||
| #define ___GFP_SKIP_KASAN	0 | ||||
| #endif | ||||
| #ifdef CONFIG_LOCKDEP | ||||
| #define ___GFP_NOLOCKDEP	0x4000000u | ||||
| #define ___GFP_NOLOCKDEP	BIT(___GFP_NOLOCKDEP_BIT) | ||||
| #else | ||||
| #define ___GFP_NOLOCKDEP	0 | ||||
| #endif | ||||
| /* If the above are modified, __GFP_BITS_SHIFT may need updating */ | ||||
| 
 | ||||
| /*
 | ||||
|  * Physical address zone modifiers (see linux/mmzone.h - low four bits) | ||||
|  | @ -249,7 +283,7 @@ typedef unsigned int __bitwise gfp_t; | |||
| #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP) | ||||
| 
 | ||||
| /* Room for N __GFP_FOO bits */ | ||||
| #define __GFP_BITS_SHIFT (26 + IS_ENABLED(CONFIG_LOCKDEP)) | ||||
| #define __GFP_BITS_SHIFT ___GFP_LAST_BIT | ||||
| #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) | ||||
| 
 | ||||
| /**
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Suren Baghdasaryan
						Suren Baghdasaryan