Commit fe22cd9b authored by Aaron Conole's avatar Aaron Conole Committed by Linus Torvalds

printk: help pr_debug and pr_devel to optimize out arguments

Currently, pr_debug and pr_devel will not elide function call arguments
appearing in calls to the no_printk for these macros.  This is because
all side effects must be honored before proceeding to the 0-value
assignment in no_printk.

The behavior is contrary to documentation found in the CodingStyle and
the header file where these functions are declared.

This patch corrects that behavior by shunting out the call to no_printk
completely.  The format string is still checked by gcc for correctness,
but no code seems to be emitted in common cases.

[akpm@linux-foundation.org: remove braces, per Joe]
Fixes: 5264f2f7 ("include/linux/printk.h: use and neaten no_printk")
Signed-off-by: default avatarAaron Conole <aconole@redhat.com>
Reported-by: default avatarDmitry Vyukov <dvyukov@google.com>
Cc: Joe Perches <joe@perches.com>
Cc: Jason Baron <jbaron@akamai.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 251c7234
...@@ -106,13 +106,13 @@ struct va_format { ...@@ -106,13 +106,13 @@ struct va_format {
/* /*
* Dummy printk for disabled debugging statements to use whilst maintaining * Dummy printk for disabled debugging statements to use whilst maintaining
* gcc's format and side-effect checking. * gcc's format checking.
*/ */
static inline __printf(1, 2) #define no_printk(fmt, ...) \
int no_printk(const char *fmt, ...) do { \
{ if (0) \
return 0; printk(fmt, ##__VA_ARGS__); \
} } while (0)
#ifdef CONFIG_EARLY_PRINTK #ifdef CONFIG_EARLY_PRINTK
extern asmlinkage __printf(1, 2) extern asmlinkage __printf(1, 2)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment