From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161238AbcGZVZx (ORCPT ); Tue, 26 Jul 2016 17:25:53 -0400 Received: from smtprelay0251.hostedemail.com ([216.40.44.251]:56576 "EHLO smtprelay.hostedemail.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1161008AbcGZVZr (ORCPT ); Tue, 26 Jul 2016 17:25:47 -0400 X-Session-Marker: 6A6F6540706572636865732E636F6D X-Spam-Summary: 2,0,0,,d41d8cd98f00b204,joe@perches.com,:::::::::,RULES_HIT:2:41:69:355:379:541:800:960:973:988:989:1260:1345:1437:1535:1605:1606:1730:1747:1777:1792:2393:2553:2559:2562:3138:3139:3140:3141:3142:3866:3870:3874:4117:4321:4605:5007:6119:6261:6609:8603:9592:10004:10848:11026:11473:11657:11658:11914:12043:12291:12296:12438:12517:12519:12555:12683:14394:21080:21433:30012:30029:30054:30090,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:fn,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:3,LUA_SUMMARY:none X-HE-Tag: move52_320c7863ff726 X-Filterd-Recvd-Size: 6619 From: Joe Perches To: Yuval Mintz , Ariel Elior , everest-linux-l2@qlogic.com Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH] qed: Add and use specific logging functions to reduce object size Date: Tue, 26 Jul 2016 14:25:41 -0700 Message-Id: X-Mailer: git-send-email 2.8.0.rc4.16.g56331f8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Current DP_ macros generate a lot of code. Using functions with vsprintf extension %pV helps reduce that size. $ size drivers/net/ethernet/qlogic/built-in.o* (x86-64) text data bss dec hex filename 165161 28470 32812 226443 3748b drivers/net/ethernet/qlogic/built-in.o.defconfig.new 190473 28470 32812 251755 3d76b drivers/net/ethernet/qlogic/built-in.o.defconfig.old 1215984 257822 39712 1513518 17182e drivers/net/ethernet/qlogic/built-in.o.allyesconfig.new 1262402 284334 39712 1586448 183510 drivers/net/ethernet/qlogic/built-in.o.allyesconfig.old Signed-off-by: Joe Perches --- drivers/net/ethernet/qlogic/qed/Makefile | 2 +- drivers/net/ethernet/qlogic/qed/qed_util.c | 82 ++++++++++++++++++++++++++++++ include/linux/qed/qed_if.h | 60 +++++++++------------- 3 files changed, 106 insertions(+), 38 deletions(-) create mode 100644 drivers/net/ethernet/qlogic/qed/qed_util.c diff --git a/drivers/net/ethernet/qlogic/qed/Makefile b/drivers/net/ethernet/qlogic/qed/Makefile index d1f157e..9d7e55f 100644 --- a/drivers/net/ethernet/qlogic/qed/Makefile +++ b/drivers/net/ethernet/qlogic/qed/Makefile @@ -2,5 +2,5 @@ obj-$(CONFIG_QED) := qed.o qed-y := qed_cxt.o qed_dev.o qed_hw.o qed_init_fw_funcs.o qed_init_ops.o \ qed_int.o qed_main.o qed_mcp.o qed_sp_commands.o qed_spq.o qed_l2.o \ - qed_selftest.o qed_dcbx.o + qed_selftest.o qed_dcbx.o qed_util.o qed-$(CONFIG_QED_SRIOV) += qed_sriov.o qed_vf.o diff --git a/drivers/net/ethernet/qlogic/qed/qed_util.c b/drivers/net/ethernet/qlogic/qed/qed_util.c new file mode 100644 index 0000000..2795e63 --- /dev/null +++ b/drivers/net/ethernet/qlogic/qed/qed_util.c @@ -0,0 +1,82 @@ +#include +#include + +#include "qed.h" + +void qed_err(const char *name, int line, const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + + pr_err("[%ps:%d(%s)] %pV", + __builtin_return_address(0), line, name ? name : "", + &vaf); + + va_end(args); +} + +void qed_notice(u32 level, const char *name, int line, const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + + if (likely(level > QED_LEVEL_NOTICE)) + return; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + + pr_notice("[%ps:%d(%s)] %pV", + __builtin_return_address(0), line, name ? name : "", + &vaf); + + va_end(args); +} + +void qed_info(u32 level, const char *name, int line, const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + + if (likely(level > QED_LEVEL_INFO)) + return; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + + pr_notice("[%ps:%d(%s)] %pV", + __builtin_return_address(0), line, name ? name : "", + &vaf); + + va_end(args); +} + +void qed_verbose(u32 level, const char *name, int line, + const char *fmt, ...) +{ + struct va_format vaf; + va_list args; + + if (likely(level > QED_LEVEL_VERBOSE)) + return; + + va_start(args, fmt); + + vaf.fmt = fmt; + vaf.va = &args; + + pr_notice("[%ps:%d(%s)] %pV", + __builtin_return_address(0), line, name ? name : "", + &vaf); + + va_end(args); +} diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h index b1e3c57..fa3d8c0 100644 --- a/include/linux/qed/qed_if.h +++ b/include/linux/qed/qed_if.h @@ -539,44 +539,30 @@ struct qed_common_ops { #define GET_FIELD(value, name) \ (((value) >> (name ## _SHIFT)) & name ## _MASK) -/* Debug print definitions */ -#define DP_ERR(cdev, fmt, ...) \ - pr_err("[%s:%d(%s)]" fmt, \ - __func__, __LINE__, \ - DP_NAME(cdev) ? DP_NAME(cdev) : "", \ - ## __VA_ARGS__) \ - -#define DP_NOTICE(cdev, fmt, ...) \ - do { \ - if (unlikely((cdev)->dp_level <= QED_LEVEL_NOTICE)) { \ - pr_notice("[%s:%d(%s)]" fmt, \ - __func__, __LINE__, \ - DP_NAME(cdev) ? DP_NAME(cdev) : "", \ - ## __VA_ARGS__); \ - \ - } \ - } while (0) - -#define DP_INFO(cdev, fmt, ...) \ - do { \ - if (unlikely((cdev)->dp_level <= QED_LEVEL_INFO)) { \ - pr_notice("[%s:%d(%s)]" fmt, \ - __func__, __LINE__, \ - DP_NAME(cdev) ? DP_NAME(cdev) : "", \ - ## __VA_ARGS__); \ - } \ - } while (0) +__printf(3, 4) +void qed_err(const char *name, int line, const char *fmt, ...); +__printf(4, 5) +void qed_notice(u32 level, const char *name, int line, const char *fmt, ...); +__printf(4, 5) +void qed_info(u32 level, const char *name, int line, const char *fmt, ...); +__printf(4, 5) +void qed_verbose(u32 level, const char *name, int line, const char *fmt, ...); -#define DP_VERBOSE(cdev, module, fmt, ...) \ - do { \ - if (unlikely(((cdev)->dp_level <= QED_LEVEL_VERBOSE) && \ - ((cdev)->dp_module & module))) { \ - pr_notice("[%s:%d(%s)]" fmt, \ - __func__, __LINE__, \ - DP_NAME(cdev) ? DP_NAME(cdev) : "", \ - ## __VA_ARGS__); \ - } \ - } while (0) +/* Debug print definitions */ +#define DP_ERR(type, fmt, ...) \ + qed_err(DP_NAME(type), __LINE__, fmt, ##__VA_ARGS__) +#define DP_NOTICE(type, fmt, ...) \ + qed_notice((type)->dp_level, DP_NAME(type), __LINE__, \ + fmt, ##__VA_ARGS__) +#define DP_INFO(type, fmt, ...) \ + qed_info((type)->dp_level, DP_NAME(type), __LINE__, \ + fmt, ##__VA_ARGS__) +#define DP_VERBOSE(type, module, fmt, ...) \ +do { \ + if ((type)->dp_module & module) \ + qed_verbose((type)->dp_level, DP_NAME(type), __LINE__, \ + fmt, ##__VA_ARGS__); \ +} while (0) enum DP_LEVEL { QED_LEVEL_VERBOSE = 0x0, -- 2.8.0.rc4.16.g56331f8