diff options
author | Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca> | 2008-02-13 18:03:37 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-02-13 19:21:20 -0500 |
commit | fb40bd78b0f91b274879cf5db8facd1e04b6052e (patch) | |
tree | 2347ccb5ad07f58ab5a4eb41174bb7b54d5f0c5b /kernel/module.c | |
parent | 9170d2f6e1dc4d79650fbf492d1cd45291c66504 (diff) |
Linux Kernel Markers: support multiple probes
RCU style multiple probes support for the Linux Kernel Markers. Common case
(one probe) is still fast and does not require dynamic allocation or a
supplementary pointer dereference on the fast path.
- Move preempt disable from the marker site to the callback.
Since we now have an internal callback, move the preempt disable/enable to the
callback instead of the marker site.
Since the callback change is done asynchronously (passing from a handler that
supports arguments to a handler that does not setup the arguments is no
arguments are passed), we can safely update it even if it is outside the
preempt disable section.
- Move probe arm to probe connection. Now, a connected probe is automatically
armed.
Remove MARK_MAX_FORMAT_LEN, unused.
This patch modifies the Linux Kernel Markers API : it removes the probe
"arm/disarm" and changes the probe function prototype : it now expects a
va_list * instead of a "...".
If we want to have more than one probe connected to a marker at a given
time (LTTng, or blktrace, ssytemtap) then we need this patch. Without it,
connecting a second probe handler to a marker will fail.
It allow us, for instance, to do interesting combinations :
Do standard tracing with LTTng and, eventually, to compute statistics
with SystemTAP, or to have a special trigger on an event that would call
a systemtap script which would stop flight recorder tracing.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Mike Mason <mmlnx@us.ibm.com>
Cc: Dipankar Sarma <dipankar@in.ibm.com>
Cc: David Smith <dsmith@redhat.com>
Cc: "Paul E. McKenney" <paulmck@us.ibm.com>
Cc: "Frank Ch. Eigler" <fche@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/module.c')
-rw-r--r-- | kernel/module.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/kernel/module.c b/kernel/module.c index 4202da97a1da..92595bad3812 100644 --- a/kernel/module.c +++ b/kernel/module.c | |||
@@ -2038,7 +2038,7 @@ static struct module *load_module(void __user *umod, | |||
2038 | #ifdef CONFIG_MARKERS | 2038 | #ifdef CONFIG_MARKERS |
2039 | if (!mod->taints) | 2039 | if (!mod->taints) |
2040 | marker_update_probe_range(mod->markers, | 2040 | marker_update_probe_range(mod->markers, |
2041 | mod->markers + mod->num_markers, NULL, NULL); | 2041 | mod->markers + mod->num_markers); |
2042 | #endif | 2042 | #endif |
2043 | err = module_finalize(hdr, sechdrs, mod); | 2043 | err = module_finalize(hdr, sechdrs, mod); |
2044 | if (err < 0) | 2044 | if (err < 0) |
@@ -2564,7 +2564,7 @@ EXPORT_SYMBOL(struct_module); | |||
2564 | #endif | 2564 | #endif |
2565 | 2565 | ||
2566 | #ifdef CONFIG_MARKERS | 2566 | #ifdef CONFIG_MARKERS |
2567 | void module_update_markers(struct module *probe_module, int *refcount) | 2567 | void module_update_markers(void) |
2568 | { | 2568 | { |
2569 | struct module *mod; | 2569 | struct module *mod; |
2570 | 2570 | ||
@@ -2572,8 +2572,7 @@ void module_update_markers(struct module *probe_module, int *refcount) | |||
2572 | list_for_each_entry(mod, &modules, list) | 2572 | list_for_each_entry(mod, &modules, list) |
2573 | if (!mod->taints) | 2573 | if (!mod->taints) |
2574 | marker_update_probe_range(mod->markers, | 2574 | marker_update_probe_range(mod->markers, |
2575 | mod->markers + mod->num_markers, | 2575 | mod->markers + mod->num_markers); |
2576 | probe_module, refcount); | ||
2577 | mutex_unlock(&module_mutex); | 2576 | mutex_unlock(&module_mutex); |
2578 | } | 2577 | } |
2579 | #endif | 2578 | #endif |