dynamic_debug: make netdev_dbg() call __netdev_printk()
authorJason Baron <jbaron@redhat.com>
Thu, 11 Aug 2011 18:36:48 +0000 (14:36 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 23 Aug 2011 01:23:06 +0000 (18:23 -0700)
Previously, if dynamic debug was enabled netdev_dbg() was using
dynamic_dev_dbg() to print out the underlying msg. Fix this by making
sure netdev_dbg() uses __netdev_printk().

Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
include/linux/dynamic_debug.h
include/linux/netdevice.h
lib/dynamic_debug.c
net/core/dev.c

index 843cb9eb42269e137998be2a7581d1dca6178c3a..feaac1ee300178cbd70665bf04be04200cd2015b 100644 (file)
@@ -47,6 +47,13 @@ extern int __dynamic_dev_dbg(struct _ddebug *descriptor,
                             const char *fmt, ...)
        __attribute__ ((format (printf, 3, 4)));
 
+struct net_device;
+
+extern int __dynamic_netdev_dbg(struct _ddebug *descriptor,
+                            const struct net_device *dev,
+                            const char *fmt, ...)
+       __attribute__ ((format (printf, 3, 4)));
+
 #define dynamic_pr_debug(fmt, ...) do {                                        \
        static struct _ddebug descriptor                                \
        __used                                                          \
@@ -67,6 +74,16 @@ extern int __dynamic_dev_dbg(struct _ddebug *descriptor,
                __dynamic_dev_dbg(&descriptor, dev, fmt, ##__VA_ARGS__);        \
        } while (0)
 
+#define dynamic_netdev_dbg(dev, fmt, ...) do {                         \
+       static struct _ddebug descriptor                                \
+       __used                                                          \
+       __attribute__((section("__verbose"), aligned(8))) =             \
+       { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__,            \
+               _DPRINTK_FLAGS_DEFAULT };                               \
+       if (unlikely(descriptor.enabled))                               \
+               __dynamic_netdev_dbg(&descriptor, dev, fmt, ##__VA_ARGS__);\
+       } while (0)
+
 #else
 
 static inline int ddebug_remove_module(const char *mod)
index ddee79bb8f1583e8dd45a46e25e264da84967104..9333a0300c5e6e20cbf9390b80eaf15e5d6894d6 100644 (file)
@@ -2617,6 +2617,9 @@ static inline const char *netdev_name(const struct net_device *dev)
        return dev->name;
 }
 
+extern int __netdev_printk(const char *level, const struct net_device *dev,
+                       struct va_format *vaf);
+
 extern int netdev_printk(const char *level, const struct net_device *dev,
                         const char *format, ...)
        __attribute__ ((format (printf, 3, 4)));
@@ -2644,8 +2647,7 @@ extern int netdev_info(const struct net_device *dev, const char *format, ...)
 #elif defined(CONFIG_DYNAMIC_DEBUG)
 #define netdev_dbg(__dev, format, args...)                     \
 do {                                                           \
-       dynamic_dev_dbg((__dev)->dev.parent, "%s: " format,     \
-                       netdev_name(__dev), ##args);            \
+       dynamic_netdev_dbg(__dev, format, ##args);              \
 } while (0)
 #else
 #define netdev_dbg(__dev, format, args...)                     \
index 4fc03ddb05f2132e051b211be928d3fbffd98050..ee3b9ba625c5401ecc537eee81827ed8312aced3 100644 (file)
@@ -33,6 +33,7 @@
 #include <linux/hardirq.h>
 #include <linux/sched.h>
 #include <linux/device.h>
+#include <linux/netdevice.h>
 
 extern struct _ddebug __start___verbose[];
 extern struct _ddebug __stop___verbose[];
@@ -503,6 +504,30 @@ int __dynamic_dev_dbg(struct _ddebug *descriptor,
 }
 EXPORT_SYMBOL(__dynamic_dev_dbg);
 
+int __dynamic_netdev_dbg(struct _ddebug *descriptor,
+                     const struct net_device *dev, const char *fmt, ...)
+{
+       struct va_format vaf;
+       va_list args;
+       int res;
+
+       BUG_ON(!descriptor);
+       BUG_ON(!fmt);
+
+       va_start(args, fmt);
+
+       vaf.fmt = fmt;
+       vaf.va = &args;
+
+       res = dynamic_emit_prefix(descriptor);
+       res += __netdev_printk(KERN_CONT, dev, &vaf);
+
+       va_end(args);
+
+       return res;
+}
+EXPORT_SYMBOL(__dynamic_netdev_dbg);
+
 static __initdata char ddebug_setup_string[1024];
 static __init int ddebug_setup_query(char *str)
 {
index 17d67b579beb0c3f6f97bfd8add5d7027741854a..c47a7bcf3c6427a5da76175c7df9c5072cf4d77c 100644 (file)
@@ -6290,7 +6290,7 @@ const char *netdev_drivername(const struct net_device *dev)
        return empty;
 }
 
-static int __netdev_printk(const char *level, const struct net_device *dev,
+int __netdev_printk(const char *level, const struct net_device *dev,
                           struct va_format *vaf)
 {
        int r;
@@ -6305,6 +6305,7 @@ static int __netdev_printk(const char *level, const struct net_device *dev,
 
        return r;
 }
+EXPORT_SYMBOL(__netdev_printk);
 
 int netdev_printk(const char *level, const struct net_device *dev,
                  const char *format, ...)