debug printk infrastructure -implement level controls
Subsystems (2)
PATCH 2/8 debug printk infrastructure -implement level controls
--- include/linux/device.h | 16 ++++++++ include/linux/dynamic_printk.h | 9 +++++ lib/dynamic_printk.c | 78 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 99 insertions(+), 4 deletions(-)
include/linux/device.h +16 -0
@@ -616,6 +616,22 @@ extern const char *dev_driver_string(struct device *dev); ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })#endif +#ifdef CONFIG_PRINTK_DEBUG +#define register_dev_dbg_handler (parent, type, max, init) \ + __register_dev_dbg_handler(KBUILD_MODNAME, parent, type, max, init) +#define dev_dbg_level (value, dev, format, ...) \ + __dev_dbg_level(KBUILD_MODNAME, value, dev, format, ##__VA_ARGS__) +#define dev_dbg_enabled (value) \ + __dev_dbg_enabled(KBUILD_MODNAME, value) +#else +#define register_dev_dbg_handler (parent, type, max, init) \ + ({ if (0) __register_dev_dbg_handler(KBUILD_MODNAME, parent, type, max, init); 0; }) +#define dev_dbg_level (value, dev, format, ...) \ + ({ if (0) __dev_dbg_level(KBUILD_MODNAME, value, dev, format, ##__VA_ARGS__); 0; }) +#define dev_dbg_enabled (value) \ + ({ if (0) __dev_dbg_enabled(KBUILD_MODNAME, value); 0; }) +#endif +#ifdef VERBOSE_DEBUG #define dev_vdbg dev_dbg#else
include/linux/dynamic_printk.h +9 -0
@@ -7,6 +7,10 @@#define DYNAMIC_HASH_BITS 5#define FILE_TABLE_SIZE (1 << DYNAMIC_HASH_BITS) +#define TYPE_LEVEL 1 +#define TYPE_FLAG 2 + +struct device ;struct mod_debug {char *modname;
@@ -40,5 +44,10 @@ static inline unsigned int dynamic_name_hash(char *name)return (hash & ((1 <<DYNAMIC_HASH_BITS ) -1 )); } +int __register_dev_dbg_handler (char *mod_name,char *parent_name,int type,int max, +int init); +void __dev_dbg_level (char *mod_name,int level,struct device *dev,char *fmt, ...); +int __dev_dbg_enabled (char *modname,int value); +#endif #endif
lib/dynamic_printk.c +74 -4
110 lines not on this page · raw message
Signature · 1 line
1.5.4.5
Andrew Morton
maintainerQuoted 7 lines · On Thu, 22 May 2008 17:15:51 -0400 Jason Baron <[email protected]> wrote:
Signed-off-by Jason Baron <[email protected]>--- include/linux/device.h | 16 ++++++++ include/linux/dynamic_printk.h | 9 +++++ lib/dynamic_printk.c | 78 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 99 insertions(+), 4 deletions(-)
no changelog...
Quoted 13 lines
include/linux/device.h +5
-0@@ -616,6 +616,22 @@ extern const char *dev_driver_string(struct device *dev); ({ if (0) dev_printk(KERN_DEBUG, dev, format, ##arg); 0; })#endif +#ifdef CONFIG_PRINTK_DEBUG +#define register_dev_dbg_handler (parent, type, max, init) \ + __register_dev_dbg_handler(KBUILD_MODNAME, parent, type, max, init) +#define dev_dbg_level (value, dev, format, ...) \ + __dev_dbg_level(KBUILD_MODNAME, value, dev, format, ##__VA_ARGS__)
include/linux/device.h extern const char *dev_driver_string(struct device *dev); · line 633
Quoted 10 lines
include/linux/device.h +10
-0+#define dev_dbg_enabled (value) \ + __dev_dbg_enabled(KBUILD_MODNAME, value) +#else +#define register_dev_dbg_handler (parent, type, max, init) \ + ({ if (0) __register_dev_dbg_handler(KBUILD_MODNAME, parent, type, max, init); 0; }) +#define dev_dbg_level (value, dev, format, ...) \ + ({ if (0) __dev_dbg_level(KBUILD_MODNAME, value, dev, format, ##__VA_ARGS__); 0; }) +#define dev_dbg_enabled (value) \ + ({ if (0) __dev_dbg_enabled(KBUILD_MODNAME, value); 0; }) +#endif
A major interface which we expect/hope thousands of developers will use. It will need documentation eventually, and we might as well add that now, to make review easier and more effective.
Quoted 23 lines
include/linux/device.h +0
-0#ifdef VERBOSE_DEBUG #define dev_vdbg dev_dbg#else include/linux/dynamic_printk.h +4
-0@@ -7,6 +7,10 @@#define DYNAMIC_HASH_BITS 5#define FILE_TABLE_SIZE (1 << DYNAMIC_HASH_BITS) +#define TYPE_LEVEL 1 +#define TYPE_FLAG 2 + +struct device ;struct mod_debug {char *modname;@@ -230,6 +292,14 @@ static ssize_t pr_debug_write(struct file *file, const char __user *buf, }
include/linux/dynamic_printk.h static ssize_t pr_debug_write(struct file *file, const char __user *buf, · line 302
Quoted 10 lines
include/linux/dynamic_printk.h +8
-0err =0 ; } + }else if (!strncmp ("set level=" , buffer,10 )) { + s = buffer +10 ; + level =strsep (&s," " ); + s =strstrip (s); +if (elem =find_debug_file (s)) { + elem->level =simple_strtol (level,NULL ,10 ); + err =0 ; + }
The first thing we zoom in on with any patch is "what is the user<->kernel interface". Once that is settled, understood and agreed on then we can get into the implementation details. Please do prepare a writeup of that. It could go in [patch 0/n] or into a Documentation/ file.
Quoted 16 lines
include/linux/dynamic_printk.h +2
-2}if (!err) err = length;@@ -268,8 +338,8 @@ static int pr_debug_seq_show(struct seq_file *s, void *v)rcu_read_lock (); head = &module_table[i];hlist_for_each_entry_rcu (element, node, head, hlist) -seq_printf (s,"%s %d %d\n" , element->name, element->enable, - element->num_uses); +seq_printf (s,"%s %d %d %d\n" , element->name, element->enable, + element->level, element->num_uses);rcu_read_unlock ();return 0 ; }Signature · 1 line
1.5.4.5