aboutsummaryrefslogtreecommitdiffstats
path: root/net/core
diff options
context:
space:
mode:
authorJoe Perches <joe@perches.com>2010-06-26 21:02:35 -0400
committerDavid S. Miller <davem@davemloft.net>2010-07-04 13:40:18 -0400
commit256df2f3879efdb2e9808bdb1b54b16fbb11fa38 (patch)
treeec7bd8e1e6d7d7066542420641ccd68e98e42bfa /net/core
parent99bcf217183e02ebae46373896fba7f12d588001 (diff)
netdevice.h net/core/dev.c: Convert netdev_<level> logging macros to functions
Reduces an x86 defconfig text and data ~2k. text is smaller, data is larger. $ size vmlinux* text data bss dec hex filename 7198862 720112 1366288 9285262 8dae8e vmlinux 7205273 716016 1366288 9287577 8db799 vmlinux.device_h Uses %pV and struct va_format Format arguments are verified before printk Signed-off-by: Joe Perches <joe@perches.com> Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r--net/core/dev.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index e85cc5fa3c4e..93b8929fa21d 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -5802,6 +5802,68 @@ char *netdev_drivername(const struct net_device *dev, char *buffer, int len)
5802 return buffer; 5802 return buffer;
5803} 5803}
5804 5804
5805static int __netdev_printk(const char *level, const struct net_device *dev,
5806 struct va_format *vaf)
5807{
5808 int r;
5809
5810 if (dev && dev->dev.parent)
5811 r = dev_printk(level, dev->dev.parent, "%s: %pV",
5812 netdev_name(dev), vaf);
5813 else if (dev)
5814 r = printk("%s%s: %pV", level, netdev_name(dev), vaf);
5815 else
5816 r = printk("%s(NULL net_device): %pV", level, vaf);
5817
5818 return r;
5819}
5820
5821int netdev_printk(const char *level, const struct net_device *dev,
5822 const char *format, ...)
5823{
5824 struct va_format vaf;
5825 va_list args;
5826 int r;
5827
5828 va_start(args, format);
5829
5830 vaf.fmt = format;
5831 vaf.va = &args;
5832
5833 r = __netdev_printk(level, dev, &vaf);
5834 va_end(args);
5835
5836 return r;
5837}
5838EXPORT_SYMBOL(netdev_printk);
5839
5840#define define_netdev_printk_level(func, level) \
5841int func(const struct net_device *dev, const char *fmt, ...) \
5842{ \
5843 int r; \
5844 struct va_format vaf; \
5845 va_list args; \
5846 \
5847 va_start(args, fmt); \
5848 \
5849 vaf.fmt = fmt; \
5850 vaf.va = &args; \
5851 \
5852 r = __netdev_printk(level, dev, &vaf); \
5853 va_end(args); \
5854 \
5855 return r; \
5856} \
5857EXPORT_SYMBOL(func);
5858
5859define_netdev_printk_level(netdev_emerg, KERN_EMERG);
5860define_netdev_printk_level(netdev_alert, KERN_ALERT);
5861define_netdev_printk_level(netdev_crit, KERN_CRIT);
5862define_netdev_printk_level(netdev_err, KERN_ERR);
5863define_netdev_printk_level(netdev_warn, KERN_WARNING);
5864define_netdev_printk_level(netdev_notice, KERN_NOTICE);
5865define_netdev_printk_level(netdev_info, KERN_INFO);
5866
5805static void __net_exit netdev_exit(struct net *net) 5867static void __net_exit netdev_exit(struct net *net)
5806{ 5868{
5807 kfree(net->dev_name_head); 5869 kfree(net->dev_name_head);