Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756764AbbLDVvq (ORCPT ); Fri, 4 Dec 2015 16:51:46 -0500 Received: from mx1.redhat.com ([209.132.183.28]:43148 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754867AbbLDVvo (ORCPT ); Fri, 4 Dec 2015 16:51:44 -0500 From: Aaron Conole To: Andrew Morton Cc: linux-kernel@vger.kernel.org, Jason Baron , Joe Perches Subject: [PATCH v2] printk: help pr_debug and pr_devel to optimize out arguments Date: Fri, 4 Dec 2015 16:51:42 -0500 Message-Id: <1449265902-21781-1-git-send-email-aconole@redhat.com> In-Reply-To: <5661BFEE.1050103@akamai.com> References: <5661BFEE.1050103@akamai.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1909 Lines: 59 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. fixes commit 5264f2f75d86 ("include/linux/printk.h: use and neaten no_printk") Signed-off-by: Aaron Conole Reported-by: Dmitry Vyukov Cc: Joe Perches Cc: Jason Baron --- v1->v2 - Change no_printk behavior to elide arguments instead of modifying individual pr_* macros, per Jason Baron's suggestion. include/linux/printk.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/include/linux/printk.h b/include/linux/printk.h index 9729565..cc3803a 100644 --- a/include/linux/printk.h +++ b/include/linux/printk.h @@ -106,13 +106,14 @@ 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) #ifdef CONFIG_EARLY_PRINTK extern asmlinkage __printf(1, 2) -- 2.6.1.133.gf5b6079 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/