Re: [PATCH] Dynamic Debug: Introduce global fake module param module.ddebug

Previous thread: GCOV doesn't seem to work on ARM with kernel 2.6.35-rc6 by Karol Lewandowski on Monday, July 26, 2010 - 3:32 am. (10 messages)

Next thread: [PATCH] RFC: drivers:staging:ti-st: netlink for kim/uim by pavan_savoy on Monday, July 26, 2010 - 5:47 am. (3 messages)
From: Thomas Renninger
Date: Monday, July 26, 2010 - 5:14 am

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 ...
From: Thomas Renninger
Date: Monday, July 26, 2010 - 6:42 am

and this time with some Documentation added...
Please use this patch instead of my first post.

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 passes ddebug 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
-> works and pr_debug messages issued at module initialization time show
up. Also "p" flag gets set for the whole hp-wmi module:
grep hp-wmi /sys/../dynamic_debug/control

Signed-off-by: Thomas Renninger <trenn@suse.de>

---
 Documentation/dynamic-debug-howto.txt |   28 +++++++++++++++++++++++++++-
 include/linux/dynamic_debug.h         |    5 +++++
 ...
From: Jason Baron
Date: Thursday, August 5, 2010 - 8:39 am

patch looks pretty good to me. I'm not sure how we reserve the 'ddebug'
keyword. However, I think its probably ok, if we mention it in
'kernel-parameters.txt' and in the dynamic debug documentation.

Also, ddebug could show up in /sys/module/$(modulename}/parameters/ ,
but this can probably be done in a followup patch.

Also, if 'ddebug' alone is set on the kernel command line, i'd like to
see us enable all debug statements. We could implement this by adding a
special 'meta' module to the control file which is just has a module
name of of 'All' or something like that. This could also be done in a
subsequent patch.

We also need to at least remove the 'dynamic_printk' doc from
kernel-parameters.txt.

thanks,

-Jason
--

From: Thomas Renninger
Date: Thursday, August 5, 2010 - 9:05 am

I added some documentation to the dynamic debug docu file and posted
the patch again (as a reply on my initial post, should be the same mail
This was intentional.
At the time /sys is available one can also use 
/sys/kernel/debug/dynamic_debug/control
echo "module my_module_to_debug +p"
          >/sys/kernel/debug/dynamic_debug/control
would exactly do the same as /sys/module/$(modulename}/parameters
The advantage of not having it, is it saves quite some resources, in 
fact it uses none.
Otherwise every module would have an addtional parameter added with a
Is there a single query which could do it?
If not, possibly a keyword like file/module called "all" could be added.
Don't know about this one.

So, I have your acked-by for this one?
Let's get this pushed into a tree, with some luck it still could make it
into 2.6.36? The other three have been taken by Pekka? He said something
about taking them, but I haven't received any confirmation.
Ah no, he acked-by them only.

As these are rather general ones, which tree should they go through, 
possibly Andrew could take them?
I can resubmit, if someone could tell me a list/maintainer that fits 
best, so that they really make it in...

Thanks,

         Thomas
--

From: Jason Baron
Date: Thursday, August 5, 2010 - 10:26 am

ok. that makes sense. I would make the all mode apply to all future


right, originally Greg KH, pulled these into his tree. Greg, can you take
a look at pulling these into your tree? So it would be this patch, and the
thread:

Subject: [patch 0/3] Dynamic Debug providing early boot debug messages via boot parameter

thanks,

-Jason
--

From: Greg KH
Date: Thursday, August 5, 2010 - 10:59 am

Ok, I'll queue this up in my tree after the 2.6.36-rc1 merge is over.
Can someone resend them to me so I don't loose them?

thanks,

greg k-h
--

From: Greg KH
Date: Thursday, August 5, 2010 - 10:25 am

It's too late for .36 as none of this has been tested in linux-next yet.
How about for .37?

thanks,

greg k-h
--

From: Thomas Renninger
Date: Thursday, August 5, 2010 - 1:11 pm

No problem. I send you a clean patchset tomorrow.
I have one additional idea I'll try to build in:
Complain if a module uses ddebug as module parameter at module
insertion time that this is a reserved keyword/param that must not be used.

I'll leave out lkml, Andrew and Pekka (I thought they could queue these).

Thanks everybody,

     Thomas
--

Previous thread: GCOV doesn't seem to work on ARM with kernel 2.6.35-rc6 by Karol Lewandowski on Monday, July 26, 2010 - 3:32 am. (10 messages)

Next thread: [PATCH] RFC: drivers:staging:ti-st: netlink for kim/uim by pavan_savoy on Monday, July 26, 2010 - 5:47 am. (3 messages)