diff options
author | Jason Baron <jbaron@redhat.com> | 2010-07-19 11:54:17 +0100 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2010-07-19 11:54:17 +0100 |
commit | ab0155a22ad5bda3a6dbfbbecc416cbe92619755 (patch) | |
tree | 0a8b2caea650cc31f61bc8723b0da275382701af /mm/kmemleak.c | |
parent | a7686a45c07462b78df5ac15fc696a86e57ccf91 (diff) | |
download | kernel-common-ab0155a22ad5bda3a6dbfbbecc416cbe92619755.tar.gz kernel-common-ab0155a22ad5bda3a6dbfbbecc416cbe92619755.tar.bz2 kernel-common-ab0155a22ad5bda3a6dbfbbecc416cbe92619755.zip |
kmemleak: Introduce a default off mode for kmemleak
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>
Acked-by: Pekka Enberg <penberg@cs.helsinki.fi>
Diffstat (limited to 'mm/kmemleak.c')
-rw-r--r-- | mm/kmemleak.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index c2c9feb3097f..d33e990e0668 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); |