Hi, Rusty -
We just [1] came across your patch [2] from last year (merged into
3.17), wherein the RO/NX mapping settings for module sections were
moved to an earlier point in the module-loading sequence.
That patch also moved the MODULE_STATE_COMING notifier call to
complete_formation(), which is relatively early to its former
do_init_module() call site. It now precedes the parse_args(),
mod_sysfs_setup(), and trace_module_load() steps.
Was the latter part of the change intended & necessary? It is
negatively impacting systemtap, which was relying on
MODULE_STATE_COMING being called from a fairly complete module state -
just before the actual initializer function call.
[1] https://sourceware.org/bugzilla/show_bug.cgi?id=18889
[2] commit 4982223e51e8ea9d09bb33c8323b5ec1877b2b51
Author: Rusty Russell <[email protected]>
Date: Wed May 14 10:54:19 2014 +0930
- FChE
"Frank Ch. Eigler" <[email protected]> writes:
> Hi, Rusty -
>
> We just [1] came across your patch [2] from last year (merged into
> 3.17), wherein the RO/NX mapping settings for module sections were
> moved to an earlier point in the module-loading sequence.
>
> That patch also moved the MODULE_STATE_COMING notifier call to
> complete_formation(), which is relatively early to its former
> do_init_module() call site. It now precedes the parse_args(),
> mod_sysfs_setup(), and trace_module_load() steps.
Yes, parse_args() can enter the module, so you really want it before
then.
> Was the latter part of the change intended & necessary? It is
> negatively impacting systemtap, which was relying on
> MODULE_STATE_COMING being called from a fairly complete module state -
> just before the actual initializer function call.
Notifiers suck for stuff like this :(
Module state has many steps, so my preference has been to open-code
explicit hooks. This would seem to reinforce that preference...
Thanks,
Rusty.
Hi, Rusty -
Thanks for your response!
> [...]
> > That patch also moved the MODULE_STATE_COMING notifier call to
> > complete_formation(), which is relatively early to its former
> > do_init_module() call site. It now precedes the parse_args(),
> > mod_sysfs_setup(), and trace_module_load() steps.
>
> Yes, parse_args() can enter the module, so you really want it before
> then.
Understood. (Perhaps mod_sysfs_setup() could sneak in ahead.)
> > Was the latter part of the change intended & necessary? It is
> > negatively impacting systemtap, which was relying on
> > MODULE_STATE_COMING being called from a fairly complete module
> > state - just before the actual initializer function call.
> Notifiers suck for stuff like this :( Module state has many steps,
> so my preference has been to open-code explicit hooks. [...]
You mean something like the trace_module_load()? (We will probably
experiment with hooking into that tracepoint instead of the notifier.)
A more hard-coded one with an in-kernel callee probably wouldn't help
module-resident clients like us.
- FChE
Hi, Rusty -
I wrote:
> [...]
> > Notifiers suck for stuff like this :( Module state has many steps,
> > so my preference has been to open-code explicit hooks. [...]
>
> You mean something like the trace_module_load()? (We will probably
> experiment with hooking into that tracepoint instead of the notifier.)
> [...]
It turns out this works OK, except for EXPORT_TRACEPOINT_SYMBOL_GPL.
Could we get a set of EXPORT_TRACEPOINT_SYMBOL_GPL's for the
trace/events/module.h tracepoints (at least module_load and
module_free)?
- FChE