From: Thomas Renninger <trenn@suse.de>
To: Jason Baron <jbaron@redhat.com>
Cc: yehuda@hq.newdream.net, LKML <linux-kernel@vger.kernel.org>
Subject: [PATCH] Dynamic Debug: Introduce global fake module param module.ddebug
Date: Mon, 26 Jul 2010 14:14:30 +0200 [thread overview]
Message-ID: <201007261414.30718.trenn@suse.de> (raw)
This patch is based on 2.6.35-rc5 + this patchset I posted recently:
[patch 0/3] Dynamic Debug providing early boot debug messages via boot parameter
It would be great to see these getting merged into 2.6.36...
Thanks,
Thomas
-----
Dynamic Debug: Introduce global fake module param module.ddebug
Dynamic Debug allows enabling of pr_debug or KERN_DEBUG messages at runtime.
This is controlled via /sys/kernel/debug/dynamic_debug/control.
One major drawback is that the whole initialization of a module cannot be
tracked, because ddebug is only aware of debug strings of loaded modules.
But this is the most interesting part...
This patch introduces a fake module parameter module.ddebug(not shown in
/sys/module/*/parameters, thus it does not use any resources/memory).
If a module gets ddebug passed as a module parameter (e.g. via module.ddebug
kernel boot param or via "modprobe module ddebug"), all debug strings of this
module get activated by issuing "module module_name +p" internally
(not via sysfs) when the module gets loaded.
Possible enhancements for the future if ddebug might get extended with
further flags:
module.ddebug=flags
Then module.ddebug="p" would be the same as module.ddebug, but if there
is a "x" ddebug flag added, one could pass:
module.ddebug="xp"
which would result in such a dynamic debug query:
module module_name +xp
One not handled side-effect of this patch:
Modules must not use "ddebug" module parameter or it will get ignored.
I tried to find a compile time check, but I could not see how that
is possible. Possibly a run-time check or at least documentation (where?)
should get added, that "ddebug" must not get used as a module parameter.
Tested with:
options hp-wmi ddebug
in modprobe.conf.local
-> works and pr_debug messages issued at module initialization time show
up. Also "p" flag gets set for the whole hp-wmi module debug strings:
grep hp-wmi /sys/../dynamic_debug/control
Signed-off-by: Thomas Renninger <trenn@suse.de>
---
include/linux/dynamic_debug.h | 5 +++++
kernel/params.c | 9 ++++++++-
lib/dynamic_debug.c | 2 +-
3 files changed, 14 insertions(+), 2 deletions(-)
Index: linux-platform_drivers/kernel/params.c
===================================================================
--- linux-platform_drivers.orig/kernel/params.c
+++ linux-platform_drivers/kernel/params.c
@@ -24,6 +24,7 @@
#include <linux/err.h>
#include <linux/slab.h>
#include <linux/ctype.h>
+#include <linux/dynamic_debug.h>
#if 0
#define DEBUGP printk
@@ -132,7 +133,7 @@ int parse_args(const char *name,
unsigned num,
int (*unknown)(char *param, char *val))
{
- char *param, *val;
+ char *param, *val, ddebug[1024];
DEBUGP("Parsing ARGS: %s\n", args);
@@ -144,6 +145,12 @@ int parse_args(const char *name,
int irq_was_disabled;
args = next_arg(args, ¶m, &val);
+ if (parameq(param, "ddebug")) {
+ sprintf(ddebug, "module %s +p", name);
+ ddebug_exec_query(ddebug);
+ continue;
+ }
+
irq_was_disabled = irqs_disabled();
ret = parse_one(param, val, params, num, unknown);
if (irq_was_disabled && !irqs_disabled()) {
Index: linux-platform_drivers/include/linux/dynamic_debug.h
===================================================================
--- linux-platform_drivers.orig/include/linux/dynamic_debug.h
+++ linux-platform_drivers/include/linux/dynamic_debug.h
@@ -41,6 +41,7 @@ int ddebug_add_module(struct _ddebug *ta
#if defined(CONFIG_DYNAMIC_DEBUG)
extern int ddebug_remove_module(const char *mod_name);
+extern int ddebug_exec_query(char *query_string);
#define __dynamic_dbg_enabled(dd) ({ \
int __ret = 0; \
@@ -77,6 +78,10 @@ static inline int ddebug_remove_module(c
{
return 0;
}
+static inline int ddebug_exec_query(char *query_string)
+{
+ return 0;
+}
#define dynamic_pr_debug(fmt, ...) \
do { if (0) printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__); } while (0)
Index: linux-platform_drivers/lib/dynamic_debug.c
===================================================================
--- linux-platform_drivers.orig/lib/dynamic_debug.c
+++ linux-platform_drivers/lib/dynamic_debug.c
@@ -429,7 +429,7 @@ static int ddebug_parse_flags(const char
return 0;
}
-static int ddebug_exec_query(char *query_string)
+int ddebug_exec_query(char *query_string)
{
unsigned int flags = 0, mask = 0;
struct ddebug_query query;
next reply other threads:[~2010-07-26 12:12 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-26 12:14 Thomas Renninger [this message]
2010-07-26 13:42 ` [PATCH] Dynamic Debug: Introduce global fake module param module.ddebug Thomas Renninger
2010-08-05 15:39 ` Jason Baron
2010-08-05 16:05 ` Thomas Renninger
2010-08-05 17:25 ` Greg KH
2010-08-05 20:11 ` Thomas Renninger
2010-08-05 17:26 ` Jason Baron
2010-08-05 17:59 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201007261414.30718.trenn@suse.de \
--to=trenn@suse.de \
--cc=jbaron@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=yehuda@hq.newdream.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.