mm/sl[ao]b: always track caller in kmalloc_(node_)track_caller()
Now, we track caller if tracing or slab debugging is enabled. If they are disabled, we could save one argument passing overhead by calling __kmalloc(_node)(). But, I think that it would be marginal. Furthermore, default slab allocator, SLUB, doesn't use this technique so I think that it's okay to change this situation. After this change, we can turn on/off CONFIG_DEBUG_SLAB without full kernel build and remove some complicated '#if' defintion. It looks more benefitial to me. Signed-off-by: Joonsoo Kim <iamjoonsoo.kim@lge.com> Acked-by: Christoph Lameter <cl@linux.com> Cc: Pekka Enberg <penberg@kernel.org> Cc: David Rientjes <rientjes@google.com> Cc: Zhang Yanfei <zhangyanfei@cn.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								07f361b2be
							
						
					
				
			
			
				commit
				
					
						61f47105a2
					
				
			
		
					 3 changed files with 0 additions and 42 deletions
				
			
		|  | @ -549,37 +549,15 @@ static inline void *kcalloc(size_t n, size_t size, gfp_t flags) | |||
|  * allocator where we care about the real place the memory allocation | ||||
|  * request comes from. | ||||
|  */ | ||||
| #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB) || \ | ||||
| 	(defined(CONFIG_SLAB) && defined(CONFIG_TRACING)) || \ | ||||
| 	(defined(CONFIG_SLOB) && defined(CONFIG_TRACING)) | ||||
| extern void *__kmalloc_track_caller(size_t, gfp_t, unsigned long); | ||||
| #define kmalloc_track_caller(size, flags) \ | ||||
| 	__kmalloc_track_caller(size, flags, _RET_IP_) | ||||
| #else | ||||
| #define kmalloc_track_caller(size, flags) \ | ||||
| 	__kmalloc(size, flags) | ||||
| #endif /* DEBUG_SLAB */ | ||||
| 
 | ||||
| #ifdef CONFIG_NUMA | ||||
| /*
 | ||||
|  * kmalloc_node_track_caller is a special version of kmalloc_node that | ||||
|  * records the calling function of the routine calling it for slab leak | ||||
|  * tracking instead of just the calling function (confusing, eh?). | ||||
|  * It's useful when the call to kmalloc_node comes from a widely-used | ||||
|  * standard allocator where we care about the real place the memory | ||||
|  * allocation request comes from. | ||||
|  */ | ||||
| #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_SLUB) || \ | ||||
| 	(defined(CONFIG_SLAB) && defined(CONFIG_TRACING)) || \ | ||||
| 	(defined(CONFIG_SLOB) && defined(CONFIG_TRACING)) | ||||
| extern void *__kmalloc_node_track_caller(size_t, gfp_t, int, unsigned long); | ||||
| #define kmalloc_node_track_caller(size, flags, node) \ | ||||
| 	__kmalloc_node_track_caller(size, flags, node, \ | ||||
| 			_RET_IP_) | ||||
| #else | ||||
| #define kmalloc_node_track_caller(size, flags, node) \ | ||||
| 	__kmalloc_node(size, flags, node) | ||||
| #endif | ||||
| 
 | ||||
| #else /* CONFIG_NUMA */ | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										18
									
								
								mm/slab.c
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								mm/slab.c
									
										
									
									
									
								
							|  | @ -3496,7 +3496,6 @@ __do_kmalloc_node(size_t size, gfp_t flags, int node, unsigned long caller) | |||
| 	return kmem_cache_alloc_node_trace(cachep, flags, node, size); | ||||
| } | ||||
| 
 | ||||
| #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_TRACING) | ||||
| void *__kmalloc_node(size_t size, gfp_t flags, int node) | ||||
| { | ||||
| 	return __do_kmalloc_node(size, flags, node, _RET_IP_); | ||||
|  | @ -3509,13 +3508,6 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t flags, | |||
| 	return __do_kmalloc_node(size, flags, node, caller); | ||||
| } | ||||
| EXPORT_SYMBOL(__kmalloc_node_track_caller); | ||||
| #else | ||||
| void *__kmalloc_node(size_t size, gfp_t flags, int node) | ||||
| { | ||||
| 	return __do_kmalloc_node(size, flags, node, 0); | ||||
| } | ||||
| EXPORT_SYMBOL(__kmalloc_node); | ||||
| #endif /* CONFIG_DEBUG_SLAB || CONFIG_TRACING */ | ||||
| #endif /* CONFIG_NUMA */ | ||||
| 
 | ||||
| /**
 | ||||
|  | @ -3541,8 +3533,6 @@ static __always_inline void *__do_kmalloc(size_t size, gfp_t flags, | |||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #if defined(CONFIG_DEBUG_SLAB) || defined(CONFIG_TRACING) | ||||
| void *__kmalloc(size_t size, gfp_t flags) | ||||
| { | ||||
| 	return __do_kmalloc(size, flags, _RET_IP_); | ||||
|  | @ -3555,14 +3545,6 @@ void *__kmalloc_track_caller(size_t size, gfp_t flags, unsigned long caller) | |||
| } | ||||
| EXPORT_SYMBOL(__kmalloc_track_caller); | ||||
| 
 | ||||
| #else | ||||
| void *__kmalloc(size_t size, gfp_t flags) | ||||
| { | ||||
| 	return __do_kmalloc(size, flags, 0); | ||||
| } | ||||
| EXPORT_SYMBOL(__kmalloc); | ||||
| #endif | ||||
| 
 | ||||
| /**
 | ||||
|  * kmem_cache_free - Deallocate an object | ||||
|  * @cachep: The cache the allocation was from. | ||||
|  |  | |||
|  | @ -468,7 +468,6 @@ void *__kmalloc(size_t size, gfp_t gfp) | |||
| } | ||||
| EXPORT_SYMBOL(__kmalloc); | ||||
| 
 | ||||
| #ifdef CONFIG_TRACING | ||||
| void *__kmalloc_track_caller(size_t size, gfp_t gfp, unsigned long caller) | ||||
| { | ||||
| 	return __do_kmalloc_node(size, gfp, NUMA_NO_NODE, caller); | ||||
|  | @ -481,7 +480,6 @@ void *__kmalloc_node_track_caller(size_t size, gfp_t gfp, | |||
| 	return __do_kmalloc_node(size, gfp, node, caller); | ||||
| } | ||||
| #endif | ||||
| #endif | ||||
| 
 | ||||
| void kfree(const void *block) | ||||
| { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Joonsoo Kim
				Joonsoo Kim