Go to the documentation of this file. 1 #ifndef _DYNAMIC_DEBUG_H
2 #define _DYNAMIC_DEBUG_H
24 #define _DPRINTK_FLAGS_NONE 0
25 #define _DPRINTK_FLAGS_PRINT (1<<0)
26 #define _DPRINTK_FLAGS_INCL_MODNAME (1<<1)
27 #define _DPRINTK_FLAGS_INCL_FUNCNAME (1<<2)
28 #define _DPRINTK_FLAGS_INCL_LINENO (1<<3)
29 #define _DPRINTK_FLAGS_INCL_TID (1<<4)
31 #define _DPRINTK_FLAGS_DEFAULT _DPRINTK_FLAGS_PRINT
33 #define _DPRINTK_FLAGS_DEFAULT 0
42 #if defined(CONFIG_DYNAMIC_DEBUG)
61 const char *fmt, ...);
63 #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \
64 static struct _ddebug __aligned(8) \
65 __attribute__((section("__verbose"))) name = { \
66 .modname = KBUILD_MODNAME, \
67 .function = __func__, \
68 .filename = __FILE__, \
71 .flags = _DPRINTK_FLAGS_DEFAULT, \
74 #define dynamic_pr_debug(fmt, ...) \
76 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
77 if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) \
78 __dynamic_pr_debug(&descriptor, pr_fmt(fmt), \
82 #define dynamic_dev_dbg(dev, fmt, ...) \
84 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
85 if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) \
86 __dynamic_dev_dbg(&descriptor, dev, fmt, \
90 #define dynamic_netdev_dbg(dev, fmt, ...) \
92 DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \
93 if (unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT)) \
94 __dynamic_netdev_dbg(&descriptor, dev, fmt, \
100 #include <linux/string.h>
101 #include <linux/errno.h>
111 if (
strstr(param,
"dyndbg")) {
114 "CONFIG_DYNAMIC_DEBUG builds\n");
120 #define dynamic_pr_debug(fmt, ...) \
121 do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0)
122 #define dynamic_dev_dbg(dev, fmt, ...) \
123 do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0)