mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-01 00:58:39 +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 | 			Linus | ||||||
| ---------- | ---------- | ||||||
| 
 | 
 | ||||||
| N: Matt Mackal |  | ||||||
| E: mpm@selenic.com |  | ||||||
| D: SLOB slab allocator |  | ||||||
| 
 |  | ||||||
| N: Matti Aarnio | N: Matti Aarnio | ||||||
| E: mea@nic.funet.fi | E: mea@nic.funet.fi | ||||||
| D: Alpha systems hacking, IPv6 and other network related stuff | D: Alpha systems hacking, IPv6 and other network related stuff | ||||||
|  | @ -1572,6 +1568,10 @@ S: Ampferstr. 50 / 4 | ||||||
| S: 6020 Innsbruck | S: 6020 Innsbruck | ||||||
| S: Austria | S: Austria | ||||||
| 
 | 
 | ||||||
|  | N: Mark Hemment | ||||||
|  | E: markhe@nextd.demon.co.uk | ||||||
|  | D: SLAB allocator implementation | ||||||
|  | 
 | ||||||
| N: Richard Henderson | N: Richard Henderson | ||||||
| E: rth@twiddle.net | E: rth@twiddle.net | ||||||
| E: rth@cygnus.com | 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. | D: Altera SoCFPGA and Nokia N900 support. | ||||||
| S: Czech Republic | S: Czech Republic | ||||||
| 
 | 
 | ||||||
|  | N: Olivia Mackall | ||||||
|  | E: olivia@selenic.com | ||||||
|  | D: SLOB slab allocator | ||||||
|  | 
 | ||||||
| N: Paul Mackerras | N: Paul Mackerras | ||||||
| E: paulus@samba.org | E: paulus@samba.org | ||||||
| D: PPP driver | 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