summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorAaron Conole <aconole@redhat.com>2016-01-15 16:59:12 -0800
committerBen Hutchings <ben@decadent.org.uk>2016-02-13 10:34:10 +0000
commit60141aacff376347bb919ce0d64fa803d204f50e (patch)
tree7c4a18a4767070976750ae734a8f349d6a8a2105 /include/linux
parent9248608dca94084ed774a8c602cbcbdc1aa8ed4a (diff)
downloadlwn-60141aacff376347bb919ce0d64fa803d204f50e.tar.gz
lwn-60141aacff376347bb919ce0d64fa803d204f50e.zip
printk: help pr_debug and pr_devel to optimize out arguments
commit fe22cd9b7c980b8b948ec85f034a8668c57ec867 upstream. 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: 5264f2f75d86 ("include/linux/printk.h: use and neaten no_printk") Signed-off-by: Aaron Conole <aconole@redhat.com> Reported-by: Dmitry Vyukov <dvyukov@google.com> Cc: Joe Perches <joe@perches.com> Cc: Jason Baron <jbaron@akamai.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/printk.h12
1 files changed, 6 insertions, 6 deletions
diff --git a/include/linux/printk.h b/include/linux/printk.h
index f0e22f75143f..13abc065e718 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -80,13 +80,13 @@ struct va_format {
/*
* 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)
-int no_printk(const char *fmt, ...)
-{
- return 0;
-}
+#define no_printk(fmt, ...) \
+do { \
+ if (0) \
+ printk(fmt, ##__VA_ARGS__); \
+} while (0)
extern asmlinkage __printf(1, 2)
void early_printk(const char *fmt, ...);