From: Catalin Marinas <catalin.marinas@arm.com>
To: linux-kernel@vger.kernel.org
Cc: Pekka Enberg <penberg@gmail.com>, Ingo Molnar <mingo@elte.hu>,
Matt Mackall <mpm@selenic.com>
Subject: [PATCH 04/15] kmemleak: Add the slob memory allocation/freeing hooks
Date: Sat, 29 Nov 2008 10:43:29 +0000 [thread overview]
Message-ID: <20081129104328.16726.74354.stgit@pc1117.cambridge.arm.com> (raw)
In-Reply-To: <20081129103908.16726.24264.stgit@pc1117.cambridge.arm.com>
This patch adds the callbacks to memleak_(alloc|free) functions from the
slob allocator.
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Pekka Enberg <penberg@gmail.com>
Cc: Matt Mackall <mpm@selenic.com>
---
mm/slob.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/mm/slob.c b/mm/slob.c
index cb675d1..98f71af 100644
--- a/mm/slob.c
+++ b/mm/slob.c
@@ -60,6 +60,7 @@
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/mm.h>
+#include <linux/memleak.h>
#include <linux/cache.h>
#include <linux/init.h>
#include <linux/module.h>
@@ -463,6 +464,7 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node)
{
unsigned int *m;
int align = max(ARCH_KMALLOC_MINALIGN, ARCH_SLAB_MINALIGN);
+ void *ret;
if (size < PAGE_SIZE - align) {
if (!size)
@@ -472,18 +474,18 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node)
if (!m)
return NULL;
*m = size;
- return (void *)m + align;
+ ret = (void *)m + align;
} else {
- void *ret;
-
ret = slob_new_page(gfp | __GFP_COMP, get_order(size), node);
if (ret) {
struct page *page;
page = virt_to_page(ret);
page->private = size;
}
- return ret;
}
+
+ memleak_alloc(ret, size, 1);
+ return ret;
}
EXPORT_SYMBOL(__kmalloc_node);
@@ -493,6 +495,7 @@ void kfree(const void *block)
if (unlikely(ZERO_OR_NULL_PTR(block)))
return;
+ memleak_free(block);
sp = (struct slob_page *)virt_to_page(block);
if (slob_page(sp)) {
@@ -555,12 +558,14 @@ struct kmem_cache *kmem_cache_create(const char *name, size_t size,
} else if (flags & SLAB_PANIC)
panic("Cannot create slab cache %s\n", name);
+ memleak_alloc(c, sizeof(struct kmem_cache), 1);
return c;
}
EXPORT_SYMBOL(kmem_cache_create);
void kmem_cache_destroy(struct kmem_cache *c)
{
+ memleak_free(c);
slob_free(c, sizeof(struct kmem_cache));
}
EXPORT_SYMBOL(kmem_cache_destroy);
@@ -577,6 +582,7 @@ void *kmem_cache_alloc_node(struct kmem_cache *c, gfp_t flags, int node)
if (c->ctor)
c->ctor(b);
+ memleak_alloc_recursive(b, c->size, 1, c->flags);
return b;
}
EXPORT_SYMBOL(kmem_cache_alloc_node);
@@ -599,6 +605,7 @@ static void kmem_rcu_free(struct rcu_head *head)
void kmem_cache_free(struct kmem_cache *c, void *b)
{
+ memleak_free_recursive(b, c->flags);
if (unlikely(c->flags & SLAB_DESTROY_BY_RCU)) {
struct slob_rcu *slob_rcu;
slob_rcu = b + (c->size - sizeof(struct slob_rcu));
next prev parent reply other threads:[~2008-11-29 10:44 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-11-29 10:43 [PATCH 00/15] Kernel memory leak detector Catalin Marinas
2008-11-29 10:43 ` [PATCH 01/15] kmemleak: Add the base support Catalin Marinas
2008-12-01 5:39 ` Yasunori Goto
2008-12-01 6:49 ` Pekka Enberg
2008-12-01 8:11 ` Yasunori Goto
2008-12-01 12:29 ` Catalin Marinas
2008-12-01 7:15 ` Pekka Enberg
2008-12-02 21:28 ` Andrew Morton
2008-12-04 18:50 ` Catalin Marinas
2008-12-04 19:03 ` Andrew Morton
2008-12-18 9:28 ` Catalin Marinas
2008-11-29 10:43 ` [PATCH 02/15] kmemleak: Add documentation on the memory leak detector Catalin Marinas
2008-11-29 10:43 ` [PATCH 03/15] kmemleak: Add the slab memory allocation/freeing hooks Catalin Marinas
2008-11-29 10:43 ` Catalin Marinas [this message]
2008-11-30 17:30 ` [PATCH 04/15] kmemleak: Add the slob " Matt Mackall
2008-11-29 10:43 ` [PATCH 05/15] kmemleak: Add the slub " Catalin Marinas
2008-11-29 11:46 ` Pekka Enberg
2008-11-29 10:43 ` [PATCH 06/15] kmemleak: Add the vmalloc " Catalin Marinas
2008-11-29 10:43 ` [PATCH 07/15] kmemleak: Add memleak_alloc callback from alloc_large_system_hash Catalin Marinas
2008-11-29 10:43 ` [PATCH 08/15] kmemleak: Add modules support Catalin Marinas
2008-11-29 10:43 ` [PATCH 09/15] x86: Provide _sdata in the vmlinux_*.lds.S files Catalin Marinas
2008-11-29 10:44 ` [PATCH 10/15] arm: Provide _sdata and __bss_stop in the vmlinux.lds.S file Catalin Marinas
2008-11-29 10:44 ` [PATCH 11/15] kmemleak: Remove some of the kmemleak false positives Catalin Marinas
2008-11-29 11:48 ` Pekka Enberg
2008-11-30 19:02 ` Catalin Marinas
2008-11-29 10:44 ` [PATCH 12/15] kmemleak: Enable the building of the memory leak detector Catalin Marinas
2008-11-29 10:44 ` [PATCH 13/15] kmemleak: Keep the __init functions after initialization Catalin Marinas
2008-11-29 10:44 ` [PATCH 14/15] kmemleak: Simple testing module for kmemleak Catalin Marinas
2008-11-29 10:44 ` [PATCH 15/15] kmemleak: Add the corresponding MAINTAINERS entry Catalin Marinas
2008-12-10 18:26 [PATCH 00/15] Kernel memory leak detector Catalin Marinas
2008-12-10 18:27 ` [PATCH 04/15] kmemleak: Add the slob memory allocation/freeing hooks Catalin Marinas
2008-12-10 18:36 ` Matt Mackall
2008-12-11 9:47 ` Catalin Marinas
2008-12-11 21:37 ` Pekka Enberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20081129104328.16726.74354.stgit@pc1117.cambridge.arm.com \
--to=catalin.marinas@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mpm@selenic.com \
--cc=penberg@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®