ath5k: Introduce _ath5k_printk to reduce code/text
authorJoe Perches <joe@perches.com>
Mon, 19 Mar 2012 00:30:53 +0000 (17:30 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 10 Apr 2012 18:52:14 +0000 (14:52 -0400)
Macros can be converted to functions to reduce overall object size.

Convert the ATH5K_PRINTK macro to use _ath5k_printk.

Allyesconfig size is reduced ~10%

$ size drivers/net/wireless/ath/ath5k/built-in.o*
   text    data     bss     dec     hex filename
 211557    2032   40672  254261   3e135 drivers/net/wireless/ath/ath5k/built-in.o.new
 235412    2032   47296  284740   45844 drivers/net/wireless/ath/ath5k/built-in.o.old

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath5k/ath5k.h
drivers/net/wireless/ath/ath5k/base.c

index 954c373..55ef93d 100644 (file)
 #define ATH5K_PRINTF(fmt, ...)                                         \
        pr_warn("%s: " fmt, __func__, ##__VA_ARGS__)
 
+void __printf(3, 4)
+_ath5k_printk(const struct ath5k_hw *ah, const char *level,
+             const char *fmt, ...);
+
 #define ATH5K_PRINTK(_sc, _level, _fmt, ...)                           \
-       printk(_level pr_fmt("%s%s" _fmt),                              \
-              ((_sc) && (_sc)->hw) ? wiphy_name((_sc)->hw->wiphy) : "", \
-              ((_sc) && (_sc)->hw) ? ": " : "",                        \
-              ##__VA_ARGS__)
+       _ath5k_printk(_sc, _level, _fmt, ##__VA_ARGS__)
 
 #define ATH5K_PRINTK_LIMIT(_sc, _level, _fmt, ...)                     \
 do {                                                                   \
index a9c0503..3007bba 100644 (file)
@@ -3040,3 +3040,23 @@ ath5k_set_beacon_filter(struct ieee80211_hw *hw, bool enable)
        ath5k_hw_set_rx_filter(ah, rfilt);
        ah->filter_flags = rfilt;
 }
+
+void _ath5k_printk(const struct ath5k_hw *ah, const char *level,
+                  const char *fmt, ...)
+{
+       struct va_format vaf;
+       va_list args;
+
+       va_start(args, fmt);
+
+       vaf.fmt = fmt;
+       vaf.va = &args;
+
+       if (ah && ah->hw)
+               printk("%s" pr_fmt("%s: %pV"),
+                      level, wiphy_name(ah->hw->wiphy), &vaf);
+       else
+               printk("%s" pr_fmt("%pV"), level, &vaf);
+
+       va_end(args);
+}