mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Catalin Marinas <catalin.marinas@arm.com>
To: Jaswinder Singh Rajput <jaswinder@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: kmemleak: Early log buffer exceeded
Date: Thu, 16 Jul 2009 17:53:37 +0100	[thread overview]
Message-ID: <1247763217.27689.36.camel@pc1117.cambridge.arm.com> (raw)
In-Reply-To: <1247678232.2429.11.camel@ht.satnam>

On Wed, 2009-07-15 at 22:47 +0530, Jaswinder Singh Rajput wrote:
> Currently this reporting seems not very impressive and not giving much
> useful information :
> 
> kmemleak: Early log buffer exceeded
> kmemleak: Kernel memory leak detector disabled
> 
> It should be something like this because it is an error and this will
> disable Kernel memory leak detector :
> 
> [    0.000173] ------------[ cut here ]------------
> [    0.000186] WARNING: at mm/kmemleak.c:726 log_early+0x39/0xa9()
> [    0.000189] Hardware name:         
> [    0.000192] Early log buffer exceeded, please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE
> [    0.000195] Modules linked in:
> [    0.000202] Pid: 0, comm: swapper Not tainted 2.6.31-rc3 #51
> [    0.000206] Call Trace:
> [    0.000216]  [<c102cf74>] warn_slowpath_common+0x60/0x90
> [    0.000222]  [<c102cfd8>] warn_slowpath_fmt+0x24/0x27
> [    0.000227]  [<c109614b>] log_early+0x39/0xa9
> [    0.000232]  [<c109682d>] kmemleak_alloc+0x41/0x4c
> [    0.000241]  [<c1093b63>] __kmalloc+0xcb/0x153
> [    0.000247]  [<c1093c04>] alloc_arraycache+0x19/0x50
> [    0.000253]  [<c1093e44>] do_tune_cpucache+0x209/0x35d
> [    0.000259]  [<c10940ee>] enable_cpucache+0x58/0x9a
> [    0.000267]  [<c14bc6e5>] kmem_cache_init_late+0x21/0xc2
> [    0.000274]  [<c14a8a20>] start_kernel+0x1e5/0x2ba
> [    0.000280]  [<c14a8340>] i386_start_kernel+0x6a/0x6f
> [    0.000380] ---[ end trace 4eaa2a86a8e2da22 ]---
> [    0.000384] kmemleak: Kernel memory leak detector disabled

I'm OK with mentioning DEBUG_KMEMLEAK_EARLY_LOG_SIZE but the stack trace
is not relevant here, it can happen in any place which allocates some
memory.

> Currently default value of DEBUG_KMEMLEAK_EARLY_LOG_SIZE is 400 which
> can be easily exceed-able if debugging is on.

That's why I made it configurable. We can indeed set it to a higher
value but that's after 2.6.31. I have a patch in to mark this buffer as
__initdata so that it is freed.

> These issues can be fixed like this :
> 
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index 12327b2..2eaf8bc 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -362,14 +362,15 @@ config DEBUG_KMEMLEAK
>  config DEBUG_KMEMLEAK_EARLY_LOG_SIZE
>  	int "Maximum kmemleak early log entries"
>  	depends on DEBUG_KMEMLEAK
> -	range 200 2000
> -	default 400
> +	range 256 2048
> +	default 512

The power of 2 boundaries is not relevant as this represents the number
of elements in an array rather than a size in bytes.

>  	help
>  	  Kmemleak must track all the memory allocations to avoid
>  	  reporting false positives. Since memory may be allocated or
>  	  freed before kmemleak is initialised, an early log buffer is
> -	  used to store these actions. If kmemleak reports "early log
> -	  buffer exceeded", please increase this value.
> +	  used to store these actions. You need to increase this value,
> +	  if kmemleak reports "Early log buffer exceeded, please increase
> +	  DEBUG_KMEMLEAK_EARLY_LOG_SIZE".
>  
>  config DEBUG_KMEMLEAK_TEST
>  	tristate "Simple test for the kernel memory leak detector"
> diff --git a/mm/kmemleak.c b/mm/kmemleak.c
> index 5aabd41..084e927 100644
> --- a/mm/kmemleak.c
> +++ b/mm/kmemleak.c
> @@ -722,7 +722,8 @@ static void log_early(int op_type, const void *ptr, size_t size,
>  	struct early_log *log;
>  
>  	if (crt_early_log >= ARRAY_SIZE(early_log)) {
> -		pr_warning("Early log buffer exceeded\n");
> +		WARN_ONCE(1, KERN_ERR "Early log buffer exceeded, "
> +			  "please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE\n");
>  		kmemleak_disable();
>  		return;
>  	}

As I said above, I wouldn't want a stack trace here. Initially, this
code called kmemleak_panic() but changed it since the stack trace isn't
relevant.

Thanks.

-- 
Catalin


  reply	other threads:[~2009-07-16 16:55 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-15 17:17 Jaswinder Singh Rajput
2009-07-16 16:53 ` Catalin Marinas [this message]
  -- strict thread matches above, loose matches on Subject: below --
2009-06-23 22:10 Sergey Senozhatsky
2009-06-23 21:26 Sergey Senozhatsky
2009-06-24  9:35 ` Catalin Marinas
2009-06-24 10:08   ` Sergey Senozhatsky
2009-06-24 13:18     ` Catalin Marinas

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=1247763217.27689.36.camel@pc1117.cambridge.arm.com \
    --to=catalin.marinas@arm.com \
    --cc=akpm@linux-foundation.org \
    --cc=jaswinder@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /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®