tracing: Define kmem_trace_alloc_notrace unconditionally
Subsystems (2)
PATCH 1/1 tracing: Define kmem_trace_alloc_notrace unconditionally
Always define kmem_trace_alloc_{,node}_notrace(), otherwise perf-kmem will show wrong stats ifndef CONFIG_KMEMTRACE, because a kmalloc() memory allocation may be traced by both trace_kmalloc and trace_kmem_cache_alloc.
Signed-off-by Li Zefan <[email protected]>
--- include/linux/slab_def.h | 24 ++---------------------- include/linux/slub_def.h | 27 +++------------------------ mm/slab.c | 4 ---- mm/slub.c | 4 ---- 4 files changed, 5 insertions(+), 54 deletions(-)
include/linux/slab_def.h +2 -22
@@ -109,21 +109,12 @@ extern struct cache_sizes malloc_sizes[];void *kmem_cache_alloc (struct kmem_cache *,gfp_t );void *__kmalloc (size_t size,gfp_t flags); +void *kmem_cache_alloc_notrace (struct kmem_cache *cachep,gfp_t flags); -#ifdef CONFIG_KMEMTRACE -extern void *kmem_cache_alloc_notrace (struct kmem_cache *cachep,gfp_t flags); -extern size_t slab_buffer_size (struct kmem_cache *cachep); -#else -static __always_inline void * -kmem_cache_alloc_notrace (struct kmem_cache *cachep,gfp_t flags) -{ -return kmem_cache_alloc (cachep, flags); -}static inline size_t slab_buffer_size (struct kmem_cache *cachep) { -return 0 ; +return cachep->buffer_size; } -#endif static __always_inline void *kmalloc(size_t size, gfp_t flags) {
@@ -165,20 +156,9 @@ found:#ifdef CONFIG_NUMA extern void *__kmalloc_node (size_t size,gfp_t flags,int node);extern void *kmem_cache_alloc_node (struct kmem_cache *,gfp_t flags,int node); - -#ifdef CONFIG_KMEMTRACE extern void *kmem_cache_alloc_node_notrace (struct kmem_cache *cachep,gfp_t flags,int nodeid); -#else -static __always_inline void * -kmem_cache_alloc_node_notrace (struct kmem_cache *cachep, -gfp_t flags, -int nodeid) -{ -return kmem_cache_alloc_node (cachep, flags, nodeid); -} -#endif static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) {
include/linux/slub_def.h +3 -24
@@ -215,18 +215,9 @@ static __always_inline struct kmem_cache *kmalloc_slab(size_t size)#endif void *kmem_cache_alloc (struct kmem_cache *,gfp_t ); +void *kmem_cache_alloc_notrace (struct kmem_cache *s,gfp_t gfpflags);void *__kmalloc (size_t size,gfp_t flags); -#ifdef CONFIG_KMEMTRACE -extern void *kmem_cache_alloc_notrace (struct kmem_cache *s,gfp_t gfpflags); -#else -static __always_inline void * -kmem_cache_alloc_notrace (struct kmem_cache *s,gfp_t gfpflags) -{ -return kmem_cache_alloc (s, gfpflags); -} -#endif - static __always_inline void *kmalloc_large(size_t size, gfp_t flags) {unsigned int order =get_order (size);
@@ -265,20 +256,8 @@ static __always_inline void *kmalloc(size_t size, gfp_t flags)#ifdef CONFIG_NUMA void *__kmalloc_node (size_t size,gfp_t flags,int node);void *kmem_cache_alloc_node (struct kmem_cache *,gfp_t flags,int node); - -#ifdef CONFIG_KMEMTRACE -extern void *kmem_cache_alloc_node_notrace (struct kmem_cache *s, -gfp_t gfpflags, -int node); -#else -static __always_inline void * -kmem_cache_alloc_node_notrace (struct kmem_cache *s, -gfp_t gfpflags, -int node) -{ -return kmem_cache_alloc_node (s, gfpflags, node); -} -#endif +void *kmem_cache_alloc_node_notrace (struct kmem_cache *s,gfp_t gfpflags, +int node); static __always_inline void *kmalloc_node(size_t size, gfp_t flags, int node) {
mm/slab.c +0 -4
@@ -3558,13 +3558,11 @@ void *kmem_cache_alloc(struct kmem_cache *cachep, gfp_t flags) }EXPORT_SYMBOL (kmem_cache_alloc); -#ifdef CONFIG_KMEMTRACE void *kmem_cache_alloc_notrace (struct kmem_cache *cachep,gfp_t flags) {return __cache_alloc (cachep, flags,__builtin_return_address (0 )); }EXPORT_SYMBOL (kmem_cache_alloc_notrace); -#endif /** * kmem_ptr_validate - check if an untrusted pointer might be a slab entry.
@@ -3621,7 +3619,6 @@ void *kmem_cache_alloc_node(struct kmem_cache *cachep, gfp_t flags, int nodeid) }EXPORT_SYMBOL (kmem_cache_alloc_node); -#ifdef CONFIG_KMEMTRACE void *kmem_cache_alloc_node_notrace (struct kmem_cache *cachep,gfp_t flags,int nodeid)
@@ -3630,7 +3627,6 @@ void *kmem_cache_alloc_node_notrace(struct kmem_cache *cachep, __builtin_return_address(0)); }EXPORT_SYMBOL (kmem_cache_alloc_node_notrace); -#endif static __always_inline void *__do_kmalloc_node (size_t size,gfp_t flags,int node,void *caller)
mm/slub.c +0 -4
@@ -1754,13 +1754,11 @@ void *kmem_cache_alloc(struct kmem_cache *s, gfp_t gfpflags) }EXPORT_SYMBOL (kmem_cache_alloc); -#ifdef CONFIG_KMEMTRACE void *kmem_cache_alloc_notrace (struct kmem_cache *s,gfp_t gfpflags) {return slab_alloc (s, gfpflags,-1 , _RET_IP_); }EXPORT_SYMBOL (kmem_cache_alloc_notrace); -#endif #ifdef CONFIG_NUMA void *kmem_cache_alloc_node (struct kmem_cache *s,gfp_t gfpflags,int node)
@@ -1775,7 +1773,6 @@ void *kmem_cache_alloc_node(struct kmem_cache *s, gfp_t gfpflags, int node)EXPORT_SYMBOL (kmem_cache_alloc_node);#endif -#ifdef CONFIG_KMEMTRACE void *kmem_cache_alloc_node_notrace (struct kmem_cache *s,gfp_t gfpflags,int node)
@@ -1783,7 +1780,6 @@ void *kmem_cache_alloc_node_notrace(struct kmem_cache *s,return slab_alloc (s, gfpflags, node, _RET_IP_); }EXPORT_SYMBOL (kmem_cache_alloc_node_notrace); -#endif /* * Slow patch handling. This may still be called frequently since objects
Signature · 1 line
1.6.3
Quoted 5 lines · Li Zefan
Always define kmem_trace_alloc_{,node}_notrace(), otherwise perf-kmem will show wrong stats ifndef
CONFIG_KMEMTRACE, because akmalloc()memory allocation may be traced by bothtrace_kmallocandtrace_kmem_cache_alloc.
Quoted 8 lines
Signed-off-by Li Zefan <[email protected]>--- include/linux/slab_def.h | 24 ++---------------------- include/linux/slub_def.h | 27 +++------------------------ mm/slab.c | 4 ---- mm/slub.c | 4 ---- 4 files changed, 5 insertions(+), 54 deletions(-)
Sorry, please ignore this patch. I'll send a v2 soon..