public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Dave Young <hidave.darkstar@gmail.com>,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [RFC/PATCH] ratelimit: make output more useful
Date: Fri, 23 Oct 2009 13:33:48 +0200	[thread overview]
Message-ID: <20091023113348.GD5886@elte.hu> (raw)
In-Reply-To: <200910191706.42223.borntraeger@de.ibm.com>


* Christian Borntraeger <borntraeger@de.ibm.com> wrote:

> Today I got 
> 
> 
> [39648.224782] Registered led device: iwl-phy0::TX
> [40676.545099] __ratelimit: 246 callbacks suppressed
> [40676.545103] abcdef[23675]: segfault at 0 ...
> 
> as you can see the ratelimit message contains a function prefix. Since this is 
> always __ratelimit, this wont help much. This patch changes __ratelimit and 
> printk_ratelimit to print the function name  that calls ratelimit.
> 
> Opinions?
> 
> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
> 
> CC: Andrew Morton <akpm@linux-foundation.org>
> CC: Ingo Molnar <mingo@elte.hu>
> CC: Dave Young <hidave.darkstar@gmail.com>
> 
>  include/linux/kernel.h    |    6 +++++-
>  include/linux/ratelimit.h |    3 ++-
>  kernel/printk.c           |    9 +--------
>  lib/ratelimit.c           |    6 +++---
>  4 files changed, 11 insertions(+), 13 deletions(-)
> 
> Index: linux-2.6/include/linux/kernel.h
> ===================================================================
> --- linux-2.6.orig/include/linux/kernel.h
> +++ linux-2.6/include/linux/kernel.h
> @@ -241,8 +241,12 @@ asmlinkage int vprintk(const char *fmt, 
>  asmlinkage int printk(const char * fmt, ...)
>  	__attribute__ ((format (printf, 1, 2))) __cold;
>  
> +/*
> + * printk rate limiting, lifted from the networking subsystem.
> + */
>  extern struct ratelimit_state printk_ratelimit_state;
> -extern int printk_ratelimit(void);
> +#define printk_ratelimit() ___ratelimit(&printk_ratelimit_state, __func__)
> +
>  extern bool printk_timed_ratelimit(unsigned long *caller_jiffies,
>  				   unsigned int interval_msec);
>  
> Index: linux-2.6/include/linux/ratelimit.h
> ===================================================================
> --- linux-2.6.orig/include/linux/ratelimit.h
> +++ linux-2.6/include/linux/ratelimit.h
> @@ -16,5 +16,6 @@ struct ratelimit_state {
>  #define DEFINE_RATELIMIT_STATE(name, interval, burst)		\
>  		struct ratelimit_state name = {interval, burst,}
>  
> -extern int __ratelimit(struct ratelimit_state *rs);
> +extern int ___ratelimit(struct ratelimit_state *rs, const char *func);
> +#define __ratelimit(state) ___ratelimit(state, __func__)
>  #endif
> Index: linux-2.6/kernel/printk.c
> ===================================================================
> --- linux-2.6.orig/kernel/printk.c
> +++ linux-2.6/kernel/printk.c
> @@ -1369,18 +1369,11 @@ late_initcall(disable_boot_consoles);
>  #if defined CONFIG_PRINTK
>  
>  /*
> - * printk rate limiting, lifted from the networking subsystem.
> - *
>   * This enforces a rate limit: not more than 10 kernel messages
>   * every 5s to make a denial-of-service attack impossible.
>   */
>  DEFINE_RATELIMIT_STATE(printk_ratelimit_state, 5 * HZ, 10);
> -
> -int printk_ratelimit(void)
> -{
> -	return __ratelimit(&printk_ratelimit_state);
> -}
> -EXPORT_SYMBOL(printk_ratelimit);
> +EXPORT_SYMBOL(printk_ratelimit_state);
>  
>  /**
>   * printk_timed_ratelimit - caller-controlled printk ratelimiting
> Index: linux-2.6/lib/ratelimit.c
> ===================================================================
> --- linux-2.6.orig/lib/ratelimit.c
> +++ linux-2.6/lib/ratelimit.c
> @@ -23,7 +23,7 @@ static DEFINE_SPINLOCK(ratelimit_lock);
>   * This enforces a rate limit: not more than @rs->ratelimit_burst callbacks
>   * in every @rs->ratelimit_jiffies
>   */
> -int __ratelimit(struct ratelimit_state *rs)
> +int ___ratelimit(struct ratelimit_state *rs, const char *func)
>  {
>  	unsigned long flags;
>  
> @@ -37,7 +37,7 @@ int __ratelimit(struct ratelimit_state *
>  	if (time_is_before_jiffies(rs->begin + rs->interval)) {
>  		if (rs->missed)
>  			printk(KERN_WARNING "%s: %d callbacks suppressed\n",
> -				__func__, rs->missed);
> +				func, rs->missed);
>  		rs->begin = 0;
>  		rs->printed = 0;
>  		rs->missed = 0;
> @@ -54,4 +54,4 @@ print:
>  	spin_unlock_irqrestore(&ratelimit_lock, flags);
>  	return 1;
>  }
> -EXPORT_SYMBOL(__ratelimit);
> +EXPORT_SYMBOL(___ratelimit);

Makes quite a bit of sense.

Mind sending it against latest tip:master (or tip:core/printk):

  http://people.redhat.com/mingo/tip.git/README

Which has a couple of ratelimit changes queued up already that collide 
with your patch:

Hunk #1 FAILED at 241.
1 out of 1 hunk FAILED -- rejects in file include/linux/kernel.h
patching file include/linux/ratelimit.h
Hunk #1 FAILED at 16.
1 out of 1 hunk FAILED -- rejects in file include/linux/ratelimit.h
patching file kernel/printk.c
Hunk #1 succeeded at 1357 (offset -12 lines).
patching file lib/ratelimit.c
Hunk #1 succeeded at 20 with fuzz 1 (offset -3 lines).
Hunk #2 FAILED at 34.
Hunk #3 succeeded at 62 with fuzz 2 (offset 8 lines).
1 out of 3 hunks FAILED -- rejects in file lib/ratelimit.c

Thanks,

	Ingo

  reply	other threads:[~2009-10-23 11:33 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-19 15:06 [RFC/PATCH] ratelimit: make output more useful Christian Borntraeger
2009-10-23 11:33 ` Ingo Molnar [this message]
2009-10-23 12:58   ` Christian Borntraeger
2009-10-23 13:11     ` Ingo Molnar
2009-10-23 14:51       ` Christian Borntraeger
2009-10-23 14:55     ` Ingo Molnar
2009-10-23 15:12       ` Christian Borntraeger
2009-10-23 21:17         ` Joe Perches
2009-10-24  1:04     ` [tip:branch?] ratelimit: Make suppressed output messages " tip-bot for Christian Borntraeger

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=20091023113348.GD5886@elte.hu \
    --to=mingo@elte.hu \
    --cc=akpm@linux-foundation.org \
    --cc=borntraeger@de.ibm.com \
    --cc=hidave.darkstar@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.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