All of lore.kernel.org
 help / color / mirror / Atom feed
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, &param, &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;

             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.