diff options
Diffstat (limited to 'include/linux/dynamic_debug.h')
| -rw-r--r-- | include/linux/dynamic_debug.h | 81 |
1 files changed, 51 insertions, 30 deletions
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index e747ecd48e1..0564e3c3988 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h | |||
| @@ -1,13 +1,6 @@ | |||
| 1 | #ifndef _DYNAMIC_DEBUG_H | 1 | #ifndef _DYNAMIC_DEBUG_H |
| 2 | #define _DYNAMIC_DEBUG_H | 2 | #define _DYNAMIC_DEBUG_H |
| 3 | 3 | ||
| 4 | /* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which | ||
| 5 | * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They | ||
| 6 | * use independent hash functions, to reduce the chance of false positives. | ||
| 7 | */ | ||
| 8 | extern long long dynamic_debug_enabled; | ||
| 9 | extern long long dynamic_debug_enabled2; | ||
| 10 | |||
| 11 | /* | 4 | /* |
| 12 | * An instance of this structure is created in a special | 5 | * An instance of this structure is created in a special |
| 13 | * ELF section at every dynamic debug callsite. At runtime, | 6 | * ELF section at every dynamic debug callsite. At runtime, |
| @@ -44,29 +37,57 @@ int ddebug_add_module(struct _ddebug *tab, unsigned int n, | |||
| 44 | 37 | ||
| 45 | #if defined(CONFIG_DYNAMIC_DEBUG) | 38 | #if defined(CONFIG_DYNAMIC_DEBUG) |
| 46 | extern int ddebug_remove_module(const char *mod_name); | 39 | extern int ddebug_remove_module(const char *mod_name); |
| 47 | extern int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) | 40 | extern __printf(2, 3) |
| 48 | __attribute__ ((format (printf, 2, 3))); | 41 | int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...); |
| 49 | 42 | ||
| 50 | #define dynamic_pr_debug(fmt, ...) do { \ | 43 | struct device; |
| 51 | static struct _ddebug descriptor \ | 44 | |
| 52 | __used \ | 45 | extern __printf(3, 4) |
| 53 | __attribute__((section("__verbose"), aligned(8))) = \ | 46 | int __dynamic_dev_dbg(struct _ddebug *descriptor, const struct device *dev, |
| 54 | { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \ | 47 | const char *fmt, ...); |
| 55 | _DPRINTK_FLAGS_DEFAULT }; \ | 48 | |
| 56 | if (unlikely(descriptor.enabled)) \ | 49 | struct net_device; |
| 57 | __dynamic_pr_debug(&descriptor, pr_fmt(fmt), ##__VA_ARGS__); \ | 50 | |
| 58 | } while (0) | 51 | extern __printf(3, 4) |
| 59 | 52 | int __dynamic_netdev_dbg(struct _ddebug *descriptor, | |
| 60 | 53 | const struct net_device *dev, | |
| 61 | #define dynamic_dev_dbg(dev, fmt, ...) do { \ | 54 | const char *fmt, ...); |
| 62 | static struct _ddebug descriptor \ | 55 | |
| 63 | __used \ | 56 | #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) \ |
| 64 | __attribute__((section("__verbose"), aligned(8))) = \ | 57 | static struct _ddebug __used __aligned(8) \ |
| 65 | { KBUILD_MODNAME, __func__, __FILE__, fmt, __LINE__, \ | 58 | __attribute__((section("__verbose"))) name = { \ |
| 66 | _DPRINTK_FLAGS_DEFAULT }; \ | 59 | .modname = KBUILD_MODNAME, \ |
| 67 | if (unlikely(descriptor.enabled)) \ | 60 | .function = __func__, \ |
| 68 | dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \ | 61 | .filename = __FILE__, \ |
| 69 | } while (0) | 62 | .format = (fmt), \ |
| 63 | .lineno = __LINE__, \ | ||
| 64 | .flags = _DPRINTK_FLAGS_DEFAULT, \ | ||
| 65 | .enabled = false, \ | ||
| 66 | } | ||
| 67 | |||
| 68 | #define dynamic_pr_debug(fmt, ...) \ | ||
| 69 | do { \ | ||
| 70 | DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ | ||
| 71 | if (unlikely(descriptor.enabled)) \ | ||
| 72 | __dynamic_pr_debug(&descriptor, pr_fmt(fmt), \ | ||
| 73 | ##__VA_ARGS__); \ | ||
| 74 | } while (0) | ||
| 75 | |||
| 76 | #define dynamic_dev_dbg(dev, fmt, ...) \ | ||
| 77 | do { \ | ||
| 78 | DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ | ||
| 79 | if (unlikely(descriptor.enabled)) \ | ||
| 80 | __dynamic_dev_dbg(&descriptor, dev, fmt, \ | ||
| 81 | ##__VA_ARGS__); \ | ||
| 82 | } while (0) | ||
| 83 | |||
| 84 | #define dynamic_netdev_dbg(dev, fmt, ...) \ | ||
| 85 | do { \ | ||
| 86 | DEFINE_DYNAMIC_DEBUG_METADATA(descriptor, fmt); \ | ||
| 87 | if (unlikely(descriptor.enabled)) \ | ||
| 88 | __dynamic_netdev_dbg(&descriptor, dev, fmt, \ | ||
| 89 | ##__VA_ARGS__); \ | ||
| 90 | } while (0) | ||
| 70 | 91 | ||
| 71 | #else | 92 | #else |
| 72 | 93 | ||
