diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-04-10 14:53:50 -0400 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-04-14 12:58:03 -0400 |
commit | 6d723736e472f7a0cd5b62c84152fceead241328 (patch) | |
tree | 8df2f6c47ebdfdeb8979758c877a5abbd9c06aef /include/linux | |
parent | 17c873ec280a03894bc718af817f7f24fa787ae1 (diff) |
tracing/events: add support for modules to TRACE_EVENT
Impact: allow modules to add TRACE_EVENTS on load
This patch adds the final hooks to allow modules to use the TRACE_EVENT
macro. A notifier and a data structure are used to link the TRACE_EVENTs
defined in the module to connect them with the ftrace event tracing system.
It also adds the necessary automated clean ups to the trace events when a
module is removed.
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/ftrace_event.h | 3 | ||||
-rw-r--r-- | include/linux/module.h | 4 | ||||
-rw-r--r-- | include/linux/trace_seq.h | 2 |
3 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h index 17810853b4f8..75f3ac01a87c 100644 --- a/include/linux/ftrace_event.h +++ b/include/linux/ftrace_event.h | |||
@@ -7,6 +7,7 @@ | |||
7 | 7 | ||
8 | struct trace_array; | 8 | struct trace_array; |
9 | struct tracer; | 9 | struct tracer; |
10 | struct dentry; | ||
10 | 11 | ||
11 | /* | 12 | /* |
12 | * The trace entry - the most basic unit of tracing. This is what | 13 | * The trace entry - the most basic unit of tracing. This is what |
@@ -87,6 +88,7 @@ struct ftrace_event_call { | |||
87 | char *name; | 88 | char *name; |
88 | char *system; | 89 | char *system; |
89 | struct dentry *dir; | 90 | struct dentry *dir; |
91 | struct trace_event *event; | ||
90 | int enabled; | 92 | int enabled; |
91 | int (*regfunc)(void); | 93 | int (*regfunc)(void); |
92 | void (*unregfunc)(void); | 94 | void (*unregfunc)(void); |
@@ -97,6 +99,7 @@ struct ftrace_event_call { | |||
97 | struct list_head fields; | 99 | struct list_head fields; |
98 | int n_preds; | 100 | int n_preds; |
99 | struct filter_pred **preds; | 101 | struct filter_pred **preds; |
102 | void *mod; | ||
100 | 103 | ||
101 | #ifdef CONFIG_EVENT_PROFILE | 104 | #ifdef CONFIG_EVENT_PROFILE |
102 | atomic_t profile_count; | 105 | atomic_t profile_count; |
diff --git a/include/linux/module.h b/include/linux/module.h index 627ac082e2a6..6155fa44168b 100644 --- a/include/linux/module.h +++ b/include/linux/module.h | |||
@@ -337,6 +337,10 @@ struct module | |||
337 | const char **trace_bprintk_fmt_start; | 337 | const char **trace_bprintk_fmt_start; |
338 | unsigned int num_trace_bprintk_fmt; | 338 | unsigned int num_trace_bprintk_fmt; |
339 | #endif | 339 | #endif |
340 | #ifdef CONFIG_EVENT_TRACING | ||
341 | struct ftrace_event_call *trace_events; | ||
342 | unsigned int num_trace_events; | ||
343 | #endif | ||
340 | 344 | ||
341 | #ifdef CONFIG_MODULE_UNLOAD | 345 | #ifdef CONFIG_MODULE_UNLOAD |
342 | /* What modules depend on me? */ | 346 | /* What modules depend on me? */ |
diff --git a/include/linux/trace_seq.h b/include/linux/trace_seq.h index 28051da876dd..15ca2c71af13 100644 --- a/include/linux/trace_seq.h +++ b/include/linux/trace_seq.h | |||
@@ -1,6 +1,8 @@ | |||
1 | #ifndef _LINUX_TRACE_SEQ_H | 1 | #ifndef _LINUX_TRACE_SEQ_H |
2 | #define _LINUX_TRACE_SEQ_H | 2 | #define _LINUX_TRACE_SEQ_H |
3 | 3 | ||
4 | #include <linux/fs.h> | ||
5 | |||
4 | /* | 6 | /* |
5 | * Trace sequences are used to allow a function to call several other functions | 7 | * Trace sequences are used to allow a function to call several other functions |
6 | * to create a string of data to use (up to a max of PAGE_SIZE. | 8 | * to create a string of data to use (up to a max of PAGE_SIZE. |