diff options
author | Catalin Marinas <catalin.marinas@arm.com> | 2009-06-11 08:23:18 -0400 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2009-06-11 12:03:30 -0400 |
commit | 06f22f13f3cc2eff00db09f053218e5d4b757bc8 (patch) | |
tree | ec913d87a0ed78912e22c78ce03d65f9ebd7061d /mm | |
parent | 4374e616d28e65265a5b433ceece275449f3d2e3 (diff) |
kmemleak: Add the slub memory allocation/freeing hooks
This patch adds the callbacks to kmemleak_(alloc|free) functions from the
slub allocator.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Christoph Lameter <cl@linux-foundation.org>
Reviewed-by: Pekka Enberg <penberg@cs.helsinki.fi>
Diffstat (limited to 'mm')
-rw-r--r-- | mm/slub.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/kmemtrace.h> | 20 | #include <linux/kmemtrace.h> |
21 | #include <linux/cpu.h> | 21 | #include <linux/cpu.h> |
22 | #include <linux/cpuset.h> | 22 | #include <linux/cpuset.h> |
23 | #include <linux/kmemleak.h> | ||
23 | #include <linux/mempolicy.h> | 24 | #include <linux/mempolicy.h> |
24 | #include <linux/ctype.h> | 25 | #include <linux/ctype.h> |
25 | #include <linux/debugobjects.h> | 26 | #include <linux/debugobjects.h> |
@@ -143,7 +144,7 @@ | |||
143 | * Set of flags that will prevent slab merging | 144 | * Set of flags that will prevent slab merging |
144 | */ | 145 | */ |
145 | #define SLUB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \ | 146 | #define SLUB_NEVER_MERGE (SLAB_RED_ZONE | SLAB_POISON | SLAB_STORE_USER | \ |
146 | SLAB_TRACE | SLAB_DESTROY_BY_RCU) | 147 | SLAB_TRACE | SLAB_DESTROY_BY_RCU | SLAB_NOLEAKTRACE) |
147 | 148 | ||
148 | #define SLUB_MERGE_SAME (SLAB_DEBUG_FREE | SLAB_RECLAIM_ACCOUNT | \ | 149 | #define SLUB_MERGE_SAME (SLAB_DEBUG_FREE | SLAB_RECLAIM_ACCOUNT | \ |
149 | SLAB_CACHE_DMA) | 150 | SLAB_CACHE_DMA) |
@@ -1617,6 +1618,7 @@ static __always_inline void *slab_alloc(struct kmem_cache *s, | |||
1617 | if (unlikely((gfpflags & __GFP_ZERO) && object)) | 1618 | if (unlikely((gfpflags & __GFP_ZERO) && object)) |
1618 | memset(object, 0, objsize); | 1619 | memset(object, 0, objsize); |
1619 | 1620 | ||
1621 | kmemleak_alloc_recursive(object, objsize, 1, s->flags, gfpflags); | ||
1620 | return object; | 1622 | return object; |
1621 | } | 1623 | } |
1622 | 1624 | ||
@@ -1746,6 +1748,7 @@ static __always_inline void slab_free(struct kmem_cache *s, | |||
1746 | struct kmem_cache_cpu *c; | 1748 | struct kmem_cache_cpu *c; |
1747 | unsigned long flags; | 1749 | unsigned long flags; |
1748 | 1750 | ||
1751 | kmemleak_free_recursive(x, s->flags); | ||
1749 | local_irq_save(flags); | 1752 | local_irq_save(flags); |
1750 | c = get_cpu_slab(s, smp_processor_id()); | 1753 | c = get_cpu_slab(s, smp_processor_id()); |
1751 | debug_check_no_locks_freed(object, c->objsize); | 1754 | debug_check_no_locks_freed(object, c->objsize); |