Re: [PATCH] kernel.h: Add printk_ratelimited and pr__rl

Ingo Molnar
2009-11-10T07:39:34Z

* Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:

> On Tue, 2009-11-10 at 06:17 +0100, Ingo Molnar wrote:
> > * Andrew Morton <akpm@linux-foundation.org> wrote:
> >
> > > On Fri, 30 Oct 2009 16:21:47 -0700
> > > Joe Perches <joe@perches.com> wrote:
> > >
> > > > +#define pr_emerg_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_EMERG pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_alert_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_ALERT pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_crit_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_CRIT pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_err_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_warning_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_notice_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_NOTICE pr_fmt(fmt), ##__VA_ARGS__)
> > > > +#define pr_info_rl(fmt, ...) \
> > > > + printk_ratelimited(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
> > >
> > > Would prefer pr_emerg_ratelimited personally. It's longer, but one
> > > doesn't ask "wtf does _rl" mean and it avoids having two identifiers
> > > which refer to the same thing.
> >
> > Yeah. It will be rarely used so that it wont ever really be 'obvious at
> > a glance', even to folks well versed in kernel source code details.
>
> Is there a reason for all this pr_ nonsense? will we depricate printk()?

Yes, pr_*() has established itself as a printk shortcut. The benefits
of:

pr_info("stuff\n");

versus:

printk(KERN_INFO "stuff\n");

are sufficiently large:

- it's shorter by 9 characters (more than a level of indentation)

- you cannot forget to add a KERN_ prefix - which is required for 98%
of all printks but which is forgotten from 50% of the submitted
patches.

so pr_*(), while named in a sucky way (all 2 letter abbrevs are sucky),
has advantages, makes stuff more readable and reduces churn.

printk wont go away as an ad-hoc print-this tool. (Nor will we convert
most of the remaining 18,000+ uses of printk() in the kernel, so
printk() will be with us forever i guess.)

Ingo