driver core: basic infrastructure for per-module dynamic debug messages
authorJason Baron <jbaron@redhat.com>
Tue, 12 Aug 2008 20:46:19 +0000 (16:46 -0400)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 16 Oct 2008 16:24:47 +0000 (09:24 -0700)
commit346e15beb5343c2eb8216d820f2ed8f150822b08
tree6433cf2980bbfbed4a9482c5edb156fc8371e071
parent33376c1c043c05077b4ac79c33804266f6c45e49
driver core: basic infrastructure for per-module dynamic debug messages

Base infrastructure to enable per-module debug messages.

I've introduced CONFIG_DYNAMIC_PRINTK_DEBUG, which when enabled centralizes
control of debugging statements on a per-module basis in one /proc file,
currently, <debugfs>/dynamic_printk/modules. When, CONFIG_DYNAMIC_PRINTK_DEBUG,
is not set, debugging statements can still be enabled as before, often by
defining 'DEBUG' for the proper compilation unit. Thus, this patch set has no
affect when CONFIG_DYNAMIC_PRINTK_DEBUG is not set.

The infrastructure currently ties into all pr_debug() and dev_dbg() calls. That
is, if CONFIG_DYNAMIC_PRINTK_DEBUG is set, all pr_debug() and dev_dbg() calls
can be dynamically enabled/disabled on a per-module basis.

Future plans include extending this functionality to subsystems, that define
their own debug levels and flags.

Usage:

Dynamic debugging is controlled by the debugfs file,
<debugfs>/dynamic_printk/modules. This file contains a list of the modules that
can be enabled. The format of the file is as follows:

<module_name> <enabled=0/1>
.
.
.

<module_name> : Name of the module in which the debug call resides
<enabled=0/1> : whether the messages are enabled or not

For example:

snd_hda_intel enabled=0
fixup enabled=1
driver enabled=0

Enable a module:

$echo "set enabled=1 <module_name>" > dynamic_printk/modules

Disable a module:

$echo "set enabled=0 <module_name>" > dynamic_printk/modules

Enable all modules:

$echo "set enabled=1 all" > dynamic_printk/modules

Disable all modules:

$echo "set enabled=0 all" > dynamic_printk/modules

Finally, passing "dynamic_printk" at the command line enables
debugging for all modules. This mode can be turned off via the above
disable command.

[gkh: minor cleanups and tweaks to make the build work quietly]

Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
14 files changed:
Documentation/kernel-parameters.txt
include/asm-generic/vmlinux.lds.h
include/linux/device.h
include/linux/dynamic_printk.h [new file with mode: 0644]
include/linux/kernel.h
include/linux/module.h
kernel/module.c
lib/Kconfig.debug
lib/Makefile
lib/dynamic_printk.c [new file with mode: 0644]
net/netfilter/nf_conntrack_pptp.c
scripts/Makefile.lib
scripts/basic/Makefile
scripts/basic/hash.c [new file with mode: 0644]