mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 0/3] Kmemleak patches for 2.6.36-rc1
@ 2010-07-15 15:08 Catalin Marinas
  2010-07-15 15:09 ` [PATCH 1/3] kmemleak: Show more information for objects found by alias Catalin Marinas
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Catalin Marinas @ 2010-07-15 15:08 UTC (permalink / raw)
  To: linux-kernel

Hi,

These are three kmemleak patches that I plan to push during the upcoming
merging window. Thanks.


Catalin Marinas (2):
      kmemleak: Show more information for objects found by alias
      kmemleak: Add DocBook style comments to kmemleak.c

Jason Baron (1):
      kmemleak: Introduce a default off mode for kmemleak


 lib/Kconfig.debug |    7 ++++
 mm/kmemleak.c     |   98 +++++++++++++++++++++++++++++++++++++++++------------
 2 files changed, 82 insertions(+), 23 deletions(-)

-- 
Catalin

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] kmemleak: Show more information for objects found by alias
  2010-07-15 15:08 [PATCH 0/3] Kmemleak patches for 2.6.36-rc1 Catalin Marinas
@ 2010-07-15 15:09 ` Catalin Marinas
  2010-07-16  9:00   ` Pekka Enberg
  2010-07-15 15:09 ` [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak Catalin Marinas
  2010-07-15 15:09 ` [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c Catalin Marinas
  2 siblings, 1 reply; 7+ messages in thread
From: Catalin Marinas @ 2010-07-15 15:09 UTC (permalink / raw)
  To: linux-kernel; +Cc: Pekka Enberg

There may be situations when an object is freed using a pointer inside
the memory block. Kmemleak should show more information to help with
debugging.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
---
 mm/kmemleak.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 2c0d032..c2c9feb 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -398,7 +398,9 @@ static struct kmemleak_object *lookup_object(unsigned long ptr, int alias)
 		object = prio_tree_entry(node, struct kmemleak_object,
 					 tree_node);
 		if (!alias && object->pointer != ptr) {
-			kmemleak_warn("Found object by alias");
+			pr_warning("Found object by alias at 0x%08lx\n", ptr);
+			dump_stack();
+			dump_object_info(object);
 			object = NULL;
 		}
 	} else


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak
  2010-07-15 15:08 [PATCH 0/3] Kmemleak patches for 2.6.36-rc1 Catalin Marinas
  2010-07-15 15:09 ` [PATCH 1/3] kmemleak: Show more information for objects found by alias Catalin Marinas
@ 2010-07-15 15:09 ` Catalin Marinas
  2010-07-16  9:00   ` Pekka Enberg
  2010-07-15 15:09 ` [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c Catalin Marinas
  2 siblings, 1 reply; 7+ messages in thread
From: Catalin Marinas @ 2010-07-15 15:09 UTC (permalink / raw)
  To: linux-kernel; +Cc: Jason Baron, Pekka Enberg

From: Jason Baron <jbaron@redhat.com>

Introduce a new DEBUG_KMEMLEAK_DEFAULT_OFF config parameter that allows
kmemleak to be disabled by default, but enabled on the command line
via: kmemleak=on. Although a reboot is required to turn it on, its still
useful to not require a re-compile.

Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
---
 lib/Kconfig.debug |    7 +++++++
 mm/kmemleak.c     |   14 +++++++++++++-
 2 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index e722e9d..95ab402 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -400,6 +400,13 @@ config DEBUG_KMEMLEAK_TEST
 
 	  If unsure, say N.
 
+config DEBUG_KMEMLEAK_DEFAULT_OFF
+	bool "Default kmemleak to off"
+	depends on DEBUG_KMEMLEAK
+	help
+	  Say Y here to disable kmemleak by default. It can then be enabled
+	  on the command line via kmemleak=on.
+
 config DEBUG_PREEMPT
 	bool "Debug preemptible kernel"
 	depends on DEBUG_KERNEL && PREEMPT && TRACE_IRQFLAGS_SUPPORT
diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index c2c9feb..d33e990 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -211,6 +211,9 @@ static signed long jiffies_scan_wait;
 static int kmemleak_stack_scan = 1;
 /* protects the memory scanning, parameters and debug/kmemleak file access */
 static DEFINE_MUTEX(scan_mutex);
+/* setting kmemleak=on, will set this var, skipping the disable */
+static int kmemleak_skip_disable;
+
 
 /*
  * Early object allocation/freeing logging. Kmemleak is initialized after the
@@ -1604,7 +1607,9 @@ static int kmemleak_boot_config(char *str)
 		return -EINVAL;
 	if (strcmp(str, "off") == 0)
 		kmemleak_disable();
-	else if (strcmp(str, "on") != 0)
+	else if (strcmp(str, "on") == 0)
+		kmemleak_skip_disable = 1;
+	else
 		return -EINVAL;
 	return 0;
 }
@@ -1618,6 +1623,13 @@ void __init kmemleak_init(void)
 	int i;
 	unsigned long flags;
 
+#ifdef CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF
+	if (!kmemleak_skip_disable) {
+		kmemleak_disable();
+		return;
+	}
+#endif
+
 	jiffies_min_age = msecs_to_jiffies(MSECS_MIN_AGE);
 	jiffies_scan_wait = msecs_to_jiffies(SECS_SCAN_WAIT * 1000);
 


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c
  2010-07-15 15:08 [PATCH 0/3] Kmemleak patches for 2.6.36-rc1 Catalin Marinas
  2010-07-15 15:09 ` [PATCH 1/3] kmemleak: Show more information for objects found by alias Catalin Marinas
  2010-07-15 15:09 ` [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak Catalin Marinas
@ 2010-07-15 15:09 ` Catalin Marinas
  2010-07-16  9:02   ` Pekka Enberg
  2 siblings, 1 reply; 7+ messages in thread
From: Catalin Marinas @ 2010-07-15 15:09 UTC (permalink / raw)
  To: linux-kernel; +Cc: Pekka Enberg

The description and parameters of the kmemleak API weren't obvious. This
patch adds comments clarifying the API usage.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
---
 mm/kmemleak.c |   80 ++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 59 insertions(+), 21 deletions(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index d33e990..5f2eb5b 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -843,10 +843,19 @@ out:
 	rcu_read_unlock();
 }
 
-/*
- * Memory allocation function callback. This function is called from the
- * kernel allocators when a new block is allocated (kmem_cache_alloc, kmalloc,
- * vmalloc etc.).
+/**
+ * kmemleak_alloc - register a newly allocated object
+ * @ptr:	pointer to beginning of the object
+ * @size:	size of the object
+ * @min_count:	minimum number of references to this object. If during memory
+ *		scanning a number of references less than @min_count is found,
+ *		the object is reported as a memory leak. If @min_count is 0,
+ *		the object is never reported as a leak. If @min_count is -1,
+ *		the object is ignored (not scanned and not reported as a leak)
+ * @gfp:	kmalloc() flags used for kmemleak internal memory allocations
+ *
+ * This function is called from the kernel allocators when a new object
+ * (memory block) is allocated (kmem_cache_alloc, kmalloc, vmalloc etc.).
  */
 void __ref kmemleak_alloc(const void *ptr, size_t size, int min_count,
 			  gfp_t gfp)
@@ -860,9 +869,12 @@ void __ref kmemleak_alloc(const void *ptr, size_t size, int min_count,
 }
 EXPORT_SYMBOL_GPL(kmemleak_alloc);
 
-/*
- * Memory freeing function callback. This function is called from the kernel
- * allocators when a block is freed (kmem_cache_free, kfree, vfree etc.).
+/**
+ * kmemleak_free - unregister a previously registered object
+ * @ptr:	pointer to beginning of the object
+ *
+ * This function is called from the kernel allocators when an object (memory
+ * block) is freed (kmem_cache_free, kfree, vfree etc.).
  */
 void __ref kmemleak_free(const void *ptr)
 {
@@ -875,9 +887,14 @@ void __ref kmemleak_free(const void *ptr)
 }
 EXPORT_SYMBOL_GPL(kmemleak_free);
 
-/*
- * Partial memory freeing function callback. This function is usually called
- * from bootmem allocator when (part of) a memory block is freed.
+/**
+ * kmemleak_free_part - partially unregister a previously registered object
+ * @ptr:	pointer to the beginning or inside the object. This also
+ *		represents the start of the range to be freed
+ * @size:	size to be unregistered
+ *
+ * This function is called when only a part of a memory block is freed
+ * (usually from the bootmem allocator).
  */
 void __ref kmemleak_free_part(const void *ptr, size_t size)
 {
@@ -890,9 +907,12 @@ void __ref kmemleak_free_part(const void *ptr, size_t size)
 }
 EXPORT_SYMBOL_GPL(kmemleak_free_part);
 
-/*
- * Mark an already allocated memory block as a false positive. This will cause
- * the block to no longer be reported as leak and always be scanned.
+/**
+ * kmemleak_not_leak - mark an allocated object as false positive
+ * @ptr:	pointer to beginning of the object
+ *
+ * Calling this function on an object will cause the memory block to no longer
+ * be reported as leak and always be scanned.
  */
 void __ref kmemleak_not_leak(const void *ptr)
 {
@@ -905,10 +925,14 @@ void __ref kmemleak_not_leak(const void *ptr)
 }
 EXPORT_SYMBOL(kmemleak_not_leak);
 
-/*
- * Ignore a memory block. This is usually done when it is known that the
- * corresponding block is not a leak and does not contain any references to
- * other allocated memory blocks.
+/**
+ * kmemleak_ignore - ignore an allocated object
+ * @ptr:	pointer to beginning of the object
+ *
+ * Calling this function on an object will cause the memory block to be
+ * ignored (not scanned and not reported as a leak). This is usually done when
+ * it is known that the corresponding block is not a leak and does not contain
+ * any references to other allocated memory blocks.
  */
 void __ref kmemleak_ignore(const void *ptr)
 {
@@ -921,8 +945,16 @@ void __ref kmemleak_ignore(const void *ptr)
 }
 EXPORT_SYMBOL(kmemleak_ignore);
 
-/*
- * Limit the range to be scanned in an allocated memory block.
+/**
+ * kmemleak_scan_area - limit the range to be scanned in an allocated object
+ * @ptr:	pointer to beginning or inside the object. This also
+ *		represents the start of the scan area
+ * @size:	size of the scan area
+ * @gfp:	kmalloc() flags used for kmemleak internal memory allocations
+ *
+ * This function is used when it is known that only certain parts of an object
+ * contain references to other objects. Kmemleak will only scan these areas
+ * reducing the number false negatives.
  */
 void __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
 {
@@ -935,8 +967,14 @@ void __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp)
 }
 EXPORT_SYMBOL(kmemleak_scan_area);
 
-/*
- * Inform kmemleak not to scan the given memory block.
+/**
+ * kmemleak_no_scan - do not scan an allocated object
+ * @ptr:	pointer to beginning of the object
+ *
+ * This function notifies kmemleak not to scan the given memory block. Useful
+ * in situations where it is known that the given object does not contain any
+ * references to other objects. Kmemleak will not scan such objects reducing
+ * the number of false negatives.
  */
 void __ref kmemleak_no_scan(const void *ptr)
 {


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/3] kmemleak: Show more information for objects found by alias
  2010-07-15 15:09 ` [PATCH 1/3] kmemleak: Show more information for objects found by alias Catalin Marinas
@ 2010-07-16  9:00   ` Pekka Enberg
  0 siblings, 0 replies; 7+ messages in thread
From: Pekka Enberg @ 2010-07-16  9:00 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: linux-kernel

Catalin Marinas wrote:
> There may be situations when an object is freed using a pointer inside
> the memory block. Kmemleak should show more information to help with
> debugging.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Pekka Enberg <penberg@cs.helsinki.fi>

Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak
  2010-07-15 15:09 ` [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak Catalin Marinas
@ 2010-07-16  9:00   ` Pekka Enberg
  0 siblings, 0 replies; 7+ messages in thread
From: Pekka Enberg @ 2010-07-16  9:00 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: linux-kernel, Jason Baron

Catalin Marinas wrote:
> From: Jason Baron <jbaron@redhat.com>
> 
> Introduce a new DEBUG_KMEMLEAK_DEFAULT_OFF config parameter that allows
> kmemleak to be disabled by default, but enabled on the command line
> via: kmemleak=on. Although a reboot is required to turn it on, its still
> useful to not require a re-compile.
> 
> Signed-off-by: Jason Baron <jbaron@redhat.com>
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Pekka Enberg <penberg@cs.helsinki.fi>

Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c
  2010-07-15 15:09 ` [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c Catalin Marinas
@ 2010-07-16  9:02   ` Pekka Enberg
  0 siblings, 0 replies; 7+ messages in thread
From: Pekka Enberg @ 2010-07-16  9:02 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: linux-kernel

Catalin Marinas wrote:
> The description and parameters of the kmemleak API weren't obvious. This
> patch adds comments clarifying the API usage.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
> Cc: Pekka Enberg <penberg@cs.helsinki.fi>

Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2010-07-16  9:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-07-15 15:08 [PATCH 0/3] Kmemleak patches for 2.6.36-rc1 Catalin Marinas
2010-07-15 15:09 ` [PATCH 1/3] kmemleak: Show more information for objects found by alias Catalin Marinas
2010-07-16  9:00   ` Pekka Enberg
2010-07-15 15:09 ` [PATCH 2/3] kmemleak: Introduce a default off mode for kmemleak Catalin Marinas
2010-07-16  9:00   ` Pekka Enberg
2010-07-15 15:09 ` [PATCH 3/3] kmemleak: Add DocBook style comments to kmemleak.c Catalin Marinas
2010-07-16  9:02   ` Pekka Enberg

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®