[RFC] dynamic debug: add dynamic_hexdump_debug macro
From: Bing Zhao <hidden>
Date: 2011-03-01 02:35:21
Also in:
lkml
Subsystem:
dynamic debug, printk, the rest · Maintainers:
Jason Baron, Jim Cromie, Petr Mladek, Linus Torvalds
dynamic_hexdump_debug(str, buf, len)
usage:
dynamic_hexdump_debug("mwifiex data: tx_buf:\n", tx_buf, 32);
Signed-off-by: Bing Zhao <redacted>
---
include/linux/dynamic_debug.h | 22 ++++++++++++++++++++++
include/linux/printk.h | 14 ++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h
index 1c70028..a7296fb 100644
--- a/include/linux/dynamic_debug.h
+++ b/include/linux/dynamic_debug.h@@ -64,6 +64,19 @@ extern int ddebug_remove_module(const char *mod_name); dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); \ } while (0) +#define dynamic_hexdump_debug(str, buf, len) \ +do { \ + static struct _ddebug descriptor \ + __used \ + __attribute__((section("__verbose"), aligned(8))) = \ + { KBUILD_MODNAME, __func__, __FILE__, str, __LINE__, \ + _DPRINTK_FLAGS_DEFAULT }; \ + if (unlikely(descriptor.enabled)) { \ + printk(KERN_DEBUG str); \ + print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \ + } \ +} while (0) + #else static inline int ddebug_remove_module(const char *mod)
@@ -75,6 +88,15 @@ static inline int ddebug_remove_module(const char *mod) do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0) #define dynamic_dev_dbg(dev, fmt, ...) \ do { if (0) dev_printk(KERN_DEBUG, dev, fmt, ##__VA_ARGS__); } while (0) + +#define dynamic_hexdump_debug(str, buf, len) \ +do { \ + if (0) { \ + printk(KERN_DEBUG str); \ + print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \ + } \ +} while (0) + #endif #endif
diff --git a/include/linux/printk.h b/include/linux/printk.h
index ee048e7..c758131 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h@@ -299,4 +299,18 @@ static inline void print_hex_dump_bytes(const char *prefix_str, int prefix_type, #endif +#if defined(DEBUG) +#define hexdump_debug(str, buf, len) \ +do { \ + printk(KERN_DEBUG str); \ + print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len); \ +} while (0) +#elif defined(CONFIG_DYNAMIC_DEBUG) +#define hexdump_debug(str, buf, len) \ + dynamic_hexdump_debug(str, buf, len) +#else +#define hexdump_debug(str, buf, len) \ + no_printk(KERN_DEBUG str) +#endif + #endif
--
1.7.0.2