1 #ifndef _DYNAMIC_PRINTK_H
2 #define _DYNAMIC_PRINTK_H
4 #define DYNAMIC_DEBUG_HASH_BITS 6
5 #define DEBUG_HASH_TABLE_SIZE (1 << DYNAMIC_DEBUG_HASH_BITS)
9 #define DYNAMIC_ENABLED_ALL 0
10 #define DYNAMIC_ENABLED_NONE 1
11 #define DYNAMIC_ENABLED_SOME 2
13 extern int dynamic_enabled;
15 /* dynamic_printk_enabled, and dynamic_printk_enabled2 are bitmasks in which
16 * bit n is set to 1 if any modname hashes into the bucket n, 0 otherwise. They
17 * use independent hash functions, to reduce the chance of false positives.
19 extern long long dynamic_printk_enabled;
20 extern long long dynamic_printk_enabled2;
24 char *logical_modname;
29 } __attribute__((aligned(8)));
31 int register_dynamic_debug_module(char *mod_name, int type, char *share_name,
32 char *flags, int hash, int hash2);
34 #if defined(CONFIG_DYNAMIC_PRINTK_DEBUG)
35 extern int unregister_dynamic_debug_module(char *mod_name);
36 extern int __dynamic_dbg_enabled_helper(char *modname, int type,
39 #define __dynamic_dbg_enabled(module, type, value, level, hash) ({ \
41 if (unlikely((dynamic_printk_enabled & (1LL << DEBUG_HASH)) && \
42 (dynamic_printk_enabled2 & (1LL << DEBUG_HASH2)))) \
43 __ret = __dynamic_dbg_enabled_helper(module, type, \
47 #define dynamic_pr_debug(fmt, ...) do { \
48 static char mod_name[] \
49 __attribute__((section("__verbose_strings"))) \
51 static struct mod_debug descriptor \
53 __attribute__((section("__verbose"), aligned(8))) = \
54 { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
55 if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
57 printk(KERN_DEBUG KBUILD_MODNAME ":" fmt, \
61 #define dynamic_dev_dbg(dev, format, ...) do { \
62 static char mod_name[] \
63 __attribute__((section("__verbose_strings"))) \
65 static struct mod_debug descriptor \
67 __attribute__((section("__verbose"), aligned(8))) = \
68 { mod_name, mod_name, NULL, TYPE_BOOLEAN, DEBUG_HASH, DEBUG_HASH2 };\
69 if (__dynamic_dbg_enabled(KBUILD_MODNAME, TYPE_BOOLEAN, \
71 dev_printk(KERN_DEBUG, dev, \
72 KBUILD_MODNAME ": " format, \
78 static inline int unregister_dynamic_debug_module(const char *mod_name)
82 static inline int __dynamic_dbg_enabled_helper(char *modname, int type,
88 #define __dynamic_dbg_enabled(module, type, value, level, hash) ({ 0; })
89 #define dynamic_pr_debug(fmt, ...) do { } while (0)
90 #define dynamic_dev_dbg(dev, format, ...) do { } while (0)