mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 08:38:45 +02:00 
			
		
		
		
	mm/slab: remove mm/slab.c and slab_def.h
Remove the SLAB implementation. Update CREDITS. Also update and properly sort the SLOB entry there. RIP SLAB allocator (1996 - 2024) Reviewed-by: Kees Cook <keescook@chromium.org> Acked-by: Christoph Lameter <cl@linux.com> Acked-by: David Rientjes <rientjes@google.com> Tested-by: David Rientjes <rientjes@google.com> Acked-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Tested-by: Hyeonggon Yoo <42.hyeyoo@gmail.com> Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
This commit is contained in:
		
							parent
							
								
									8c20b29db5
								
							
						
					
					
						commit
						16a1d96835
					
				
					 3 changed files with 8 additions and 4133 deletions
				
			
		
							
								
								
									
										12
									
								
								CREDITS
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								CREDITS
									
									
									
									
									
								
							|  | @ -9,10 +9,6 @@ | |||
| 			Linus | ||||
| ---------- | ||||
| 
 | ||||
| N: Matt Mackal | ||||
| E: mpm@selenic.com | ||||
| D: SLOB slab allocator | ||||
| 
 | ||||
| N: Matti Aarnio | ||||
| E: mea@nic.funet.fi | ||||
| D: Alpha systems hacking, IPv6 and other network related stuff | ||||
|  | @ -1572,6 +1568,10 @@ S: Ampferstr. 50 / 4 | |||
| S: 6020 Innsbruck | ||||
| S: Austria | ||||
| 
 | ||||
| N: Mark Hemment | ||||
| E: markhe@nextd.demon.co.uk | ||||
| D: SLAB allocator implementation | ||||
| 
 | ||||
| N: Richard Henderson | ||||
| E: rth@twiddle.net | ||||
| E: rth@cygnus.com | ||||
|  | @ -2437,6 +2437,10 @@ D: work on suspend-to-ram/disk, killing duplicates from ioctl32, | |||
| D: Altera SoCFPGA and Nokia N900 support. | ||||
| S: Czech Republic | ||||
| 
 | ||||
| N: Olivia Mackall | ||||
| E: olivia@selenic.com | ||||
| D: SLOB slab allocator | ||||
| 
 | ||||
| N: Paul Mackerras | ||||
| E: paulus@samba.org | ||||
| D: PPP driver | ||||
|  |  | |||
|  | @ -1,124 +0,0 @@ | |||
| /* SPDX-License-Identifier: GPL-2.0 */ | ||||
| #ifndef _LINUX_SLAB_DEF_H | ||||
| #define	_LINUX_SLAB_DEF_H | ||||
| 
 | ||||
| #include <linux/kfence.h> | ||||
| #include <linux/reciprocal_div.h> | ||||
| 
 | ||||
| /*
 | ||||
|  * Definitions unique to the original Linux SLAB allocator. | ||||
|  */ | ||||
| 
 | ||||
| struct kmem_cache { | ||||
| 	struct array_cache __percpu *cpu_cache; | ||||
| 
 | ||||
| /* 1) Cache tunables. Protected by slab_mutex */ | ||||
| 	unsigned int batchcount; | ||||
| 	unsigned int limit; | ||||
| 	unsigned int shared; | ||||
| 
 | ||||
| 	unsigned int size; | ||||
| 	struct reciprocal_value reciprocal_buffer_size; | ||||
| /* 2) touched by every alloc & free from the backend */ | ||||
| 
 | ||||
| 	slab_flags_t flags;		/* constant flags */ | ||||
| 	unsigned int num;		/* # of objs per slab */ | ||||
| 
 | ||||
| /* 3) cache_grow/shrink */ | ||||
| 	/* order of pgs per slab (2^n) */ | ||||
| 	unsigned int gfporder; | ||||
| 
 | ||||
| 	/* force GFP flags, e.g. GFP_DMA */ | ||||
| 	gfp_t allocflags; | ||||
| 
 | ||||
| 	size_t colour;			/* cache colouring range */ | ||||
| 	unsigned int colour_off;	/* colour offset */ | ||||
| 	unsigned int freelist_size; | ||||
| 
 | ||||
| 	/* constructor func */ | ||||
| 	void (*ctor)(void *obj); | ||||
| 
 | ||||
| /* 4) cache creation/removal */ | ||||
| 	const char *name; | ||||
| 	struct list_head list; | ||||
| 	int refcount; | ||||
| 	int object_size; | ||||
| 	int align; | ||||
| 
 | ||||
| /* 5) statistics */ | ||||
| #ifdef CONFIG_DEBUG_SLAB | ||||
| 	unsigned long num_active; | ||||
| 	unsigned long num_allocations; | ||||
| 	unsigned long high_mark; | ||||
| 	unsigned long grown; | ||||
| 	unsigned long reaped; | ||||
| 	unsigned long errors; | ||||
| 	unsigned long max_freeable; | ||||
| 	unsigned long node_allocs; | ||||
| 	unsigned long node_frees; | ||||
| 	unsigned long node_overflow; | ||||
| 	atomic_t allochit; | ||||
| 	atomic_t allocmiss; | ||||
| 	atomic_t freehit; | ||||
| 	atomic_t freemiss; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * If debugging is enabled, then the allocator can add additional | ||||
| 	 * fields and/or padding to every object. 'size' contains the total | ||||
| 	 * object size including these internal fields, while 'obj_offset' | ||||
| 	 * and 'object_size' contain the offset to the user object and its | ||||
| 	 * size. | ||||
| 	 */ | ||||
| 	int obj_offset; | ||||
| #endif /* CONFIG_DEBUG_SLAB */ | ||||
| 
 | ||||
| #ifdef CONFIG_KASAN_GENERIC | ||||
| 	struct kasan_cache kasan_info; | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_SLAB_FREELIST_RANDOM | ||||
| 	unsigned int *random_seq; | ||||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_HARDENED_USERCOPY | ||||
| 	unsigned int useroffset;	/* Usercopy region offset */ | ||||
| 	unsigned int usersize;		/* Usercopy region size */ | ||||
| #endif | ||||
| 
 | ||||
| 	struct kmem_cache_node *node[MAX_NUMNODES]; | ||||
| }; | ||||
| 
 | ||||
| static inline void *nearest_obj(struct kmem_cache *cache, const struct slab *slab, | ||||
| 				void *x) | ||||
| { | ||||
| 	void *object = x - (x - slab->s_mem) % cache->size; | ||||
| 	void *last_object = slab->s_mem + (cache->num - 1) * cache->size; | ||||
| 
 | ||||
| 	if (unlikely(object > last_object)) | ||||
| 		return last_object; | ||||
| 	else | ||||
| 		return object; | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * We want to avoid an expensive divide : (offset / cache->size) | ||||
|  *   Using the fact that size is a constant for a particular cache, | ||||
|  *   we can replace (offset / cache->size) by | ||||
|  *   reciprocal_divide(offset, cache->reciprocal_buffer_size) | ||||
|  */ | ||||
| static inline unsigned int obj_to_index(const struct kmem_cache *cache, | ||||
| 					const struct slab *slab, void *obj) | ||||
| { | ||||
| 	u32 offset = (obj - slab->s_mem); | ||||
| 	return reciprocal_divide(offset, cache->reciprocal_buffer_size); | ||||
| } | ||||
| 
 | ||||
| static inline int objs_per_slab(const struct kmem_cache *cache, | ||||
| 				     const struct slab *slab) | ||||
| { | ||||
| 	if (is_kfence_address(slab_address(slab))) | ||||
| 		return 1; | ||||
| 	return cache->num; | ||||
| } | ||||
| 
 | ||||
| #endif	/* _LINUX_SLAB_DEF_H */ | ||||
		Loading…
	
		Reference in a new issue
	
	 Vlastimil Babka
						Vlastimil Babka