diff options
-rw-r--r-- | parse-events.c | 10 | ||||
-rw-r--r-- | parse-events.h | 6 | ||||
-rw-r--r-- | plugin_hrtimer.c | 8 | ||||
-rw-r--r-- | plugin_kmem.c | 16 | ||||
-rw-r--r-- | plugin_mac80211.c | 8 | ||||
-rw-r--r-- | plugin_sched_switch.c | 10 | ||||
-rw-r--r-- | trace-ftrace.c | 16 |
7 files changed, 41 insertions, 33 deletions
diff --git a/parse-events.c b/parse-events.c index 9873ef0..e48900a 100644 --- a/parse-events.c +++ b/parse-events.c | |||
@@ -59,6 +59,7 @@ struct event_handler { | |||
59 | const char *sys_name; | 59 | const char *sys_name; |
60 | const char *event_name; | 60 | const char *event_name; |
61 | pevent_event_handler_func func; | 61 | pevent_event_handler_func func; |
62 | void *context; | ||
62 | }; | 63 | }; |
63 | 64 | ||
64 | struct pevent_func_params { | 65 | struct pevent_func_params { |
@@ -3780,7 +3781,8 @@ void pevent_event_info(struct trace_seq *s, struct event_format *event, | |||
3780 | else { | 3781 | else { |
3781 | 3782 | ||
3782 | if (event->handler) | 3783 | if (event->handler) |
3783 | print_pretty = event->handler(s, record, event); | 3784 | print_pretty = event->handler(s, record, event, |
3785 | event->context); | ||
3784 | 3786 | ||
3785 | if (print_pretty) | 3787 | if (print_pretty) |
3786 | pretty_print(s, record->data, record->size, event); | 3788 | pretty_print(s, record->data, record->size, event); |
@@ -4234,6 +4236,7 @@ static int find_event_handle(struct pevent *pevent, struct event_format *event) | |||
4234 | event->id, event->system, event->name); | 4236 | event->id, event->system, event->name); |
4235 | 4237 | ||
4236 | event->handler = handle->func; | 4238 | event->handler = handle->func; |
4239 | event->context = handle->context; | ||
4237 | 4240 | ||
4238 | *next = handle->next; | 4241 | *next = handle->next; |
4239 | free_handler(handle); | 4242 | free_handler(handle); |
@@ -4454,7 +4457,8 @@ int pevent_register_print_function(struct pevent *pevent, | |||
4454 | */ | 4457 | */ |
4455 | int pevent_register_event_handler(struct pevent *pevent, | 4458 | int pevent_register_event_handler(struct pevent *pevent, |
4456 | int id, char *sys_name, char *event_name, | 4459 | int id, char *sys_name, char *event_name, |
4457 | pevent_event_handler_func func) | 4460 | pevent_event_handler_func func, |
4461 | void *context) | ||
4458 | { | 4462 | { |
4459 | struct event_format *event; | 4463 | struct event_format *event; |
4460 | struct event_handler *handle; | 4464 | struct event_handler *handle; |
@@ -4478,6 +4482,7 @@ int pevent_register_event_handler(struct pevent *pevent, | |||
4478 | event->id, event->system, event->name); | 4482 | event->id, event->system, event->name); |
4479 | 4483 | ||
4480 | event->handler = func; | 4484 | event->handler = func; |
4485 | event->context = context; | ||
4481 | return 0; | 4486 | return 0; |
4482 | 4487 | ||
4483 | not_found: | 4488 | not_found: |
@@ -4493,6 +4498,7 @@ int pevent_register_event_handler(struct pevent *pevent, | |||
4493 | handle->func = func; | 4498 | handle->func = func; |
4494 | handle->next = pevent->handlers; | 4499 | handle->next = pevent->handlers; |
4495 | pevent->handlers = handle; | 4500 | pevent->handlers = handle; |
4501 | handle->context = context; | ||
4496 | 4502 | ||
4497 | return -1; | 4503 | return -1; |
4498 | } | 4504 | } |
diff --git a/parse-events.h b/parse-events.h index 0283f57..7d1c42e 100644 --- a/parse-events.h +++ b/parse-events.h | |||
@@ -87,7 +87,8 @@ struct event_format; | |||
87 | 87 | ||
88 | typedef int (*pevent_event_handler_func)(struct trace_seq *s, | 88 | typedef int (*pevent_event_handler_func)(struct trace_seq *s, |
89 | struct record *record, | 89 | struct record *record, |
90 | struct event_format *event); | 90 | struct event_format *event, |
91 | void *context); | ||
91 | 92 | ||
92 | typedef int (*pevent_plugin_load_func)(struct pevent *pevent); | 93 | typedef int (*pevent_plugin_load_func)(struct pevent *pevent); |
93 | typedef int (*pevent_plugin_unload_func)(void); | 94 | typedef int (*pevent_plugin_unload_func)(void); |
@@ -230,6 +231,7 @@ struct event_format { | |||
230 | struct print_fmt print_fmt; | 231 | struct print_fmt print_fmt; |
231 | char *system; | 232 | char *system; |
232 | pevent_event_handler_func handler; | 233 | pevent_event_handler_func handler; |
234 | void *context; | ||
233 | }; | 235 | }; |
234 | 236 | ||
235 | enum { | 237 | enum { |
@@ -428,7 +430,7 @@ int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long siz | |||
428 | int pevent_parse_event(struct pevent *pevent, char *buf, unsigned long size, char *sys); | 430 | int pevent_parse_event(struct pevent *pevent, char *buf, unsigned long size, char *sys); |
429 | 431 | ||
430 | int pevent_register_event_handler(struct pevent *pevent, int id, char *sys_name, char *event_name, | 432 | int pevent_register_event_handler(struct pevent *pevent, int id, char *sys_name, char *event_name, |
431 | pevent_event_handler_func func); | 433 | pevent_event_handler_func func, void *context); |
432 | int pevent_register_print_function(struct pevent *pevent, | 434 | int pevent_register_print_function(struct pevent *pevent, |
433 | pevent_func_handler func, | 435 | pevent_func_handler func, |
434 | enum pevent_func_arg_type ret_type, | 436 | enum pevent_func_arg_type ret_type, |
diff --git a/plugin_hrtimer.c b/plugin_hrtimer.c index a326bf0..eafcbbd 100644 --- a/plugin_hrtimer.c +++ b/plugin_hrtimer.c | |||
@@ -52,7 +52,7 @@ static void print_field(struct trace_seq *s, const char *fmt, | |||
52 | } | 52 | } |
53 | 53 | ||
54 | static int timer_expire_handler(struct trace_seq *s, struct record *record, | 54 | static int timer_expire_handler(struct trace_seq *s, struct record *record, |
55 | struct event_format *event) | 55 | struct event_format *event, void *context) |
56 | { | 56 | { |
57 | void *data = record->data; | 57 | void *data = record->data; |
58 | 58 | ||
@@ -69,7 +69,7 @@ static int timer_expire_handler(struct trace_seq *s, struct record *record, | |||
69 | } | 69 | } |
70 | 70 | ||
71 | static int timer_start_handler(struct trace_seq *s, struct record *record, | 71 | static int timer_start_handler(struct trace_seq *s, struct record *record, |
72 | struct event_format *event) | 72 | struct event_format *event, void *context) |
73 | { | 73 | { |
74 | struct pevent *pevent = event->pevent; | 74 | struct pevent *pevent = event->pevent; |
75 | struct format_field *fn = pevent_find_field(event, "function"); | 75 | struct format_field *fn = pevent_find_field(event, "function"); |
@@ -106,10 +106,10 @@ static int timer_start_handler(struct trace_seq *s, struct record *record, | |||
106 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | 106 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) |
107 | { | 107 | { |
108 | pevent_register_event_handler(pevent, -1, "timer", "hrtimer_expire_entry", | 108 | pevent_register_event_handler(pevent, -1, "timer", "hrtimer_expire_entry", |
109 | timer_expire_handler); | 109 | timer_expire_handler, NULL); |
110 | 110 | ||
111 | pevent_register_event_handler(pevent, -1, "timer", "hrtimer_start", | 111 | pevent_register_event_handler(pevent, -1, "timer", "hrtimer_start", |
112 | timer_start_handler); | 112 | timer_start_handler, NULL); |
113 | 113 | ||
114 | return 0; | 114 | return 0; |
115 | } | 115 | } |
diff --git a/plugin_kmem.c b/plugin_kmem.c index bcf7af6..de50513 100644 --- a/plugin_kmem.c +++ b/plugin_kmem.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "trace-cmd.h" | 25 | #include "trace-cmd.h" |
26 | 26 | ||
27 | static int call_site_handler(struct trace_seq *s, struct record *record, | 27 | static int call_site_handler(struct trace_seq *s, struct record *record, |
28 | struct event_format *event) | 28 | struct event_format *event, void *context) |
29 | { | 29 | { |
30 | struct format_field *field; | 30 | struct format_field *field; |
31 | unsigned long long val, addr; | 31 | unsigned long long val, addr; |
@@ -52,25 +52,25 @@ static int call_site_handler(struct trace_seq *s, struct record *record, | |||
52 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | 52 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) |
53 | { | 53 | { |
54 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", | 54 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", |
55 | call_site_handler); | 55 | call_site_handler, NULL); |
56 | 56 | ||
57 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc", | 57 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc", |
58 | call_site_handler); | 58 | call_site_handler, NULL); |
59 | 59 | ||
60 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc_node", | 60 | pevent_register_event_handler(pevent, -1, "kmem", "kmalloc_node", |
61 | call_site_handler); | 61 | call_site_handler, NULL); |
62 | 62 | ||
63 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc", | 63 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc", |
64 | call_site_handler); | 64 | call_site_handler, NULL); |
65 | 65 | ||
66 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc_node", | 66 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_alloc_node", |
67 | call_site_handler); | 67 | call_site_handler, NULL); |
68 | 68 | ||
69 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", | 69 | pevent_register_event_handler(pevent, -1, "kmem", "kfree", |
70 | call_site_handler); | 70 | call_site_handler, NULL); |
71 | 71 | ||
72 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_free", | 72 | pevent_register_event_handler(pevent, -1, "kmem", "kmem_cache_free", |
73 | call_site_handler); | 73 | call_site_handler, NULL); |
74 | 74 | ||
75 | return 0; | 75 | return 0; |
76 | } | 76 | } |
diff --git a/plugin_mac80211.c b/plugin_mac80211.c index 6aeb256..e194ec2 100644 --- a/plugin_mac80211.c +++ b/plugin_mac80211.c | |||
@@ -166,7 +166,7 @@ static void _print_flag(struct trace_seq *s, struct event_format *event, | |||
166 | #define SP() trace_seq_putc(s, ' ') | 166 | #define SP() trace_seq_putc(s, ' ') |
167 | 167 | ||
168 | static int drv_bss_info_changed(struct trace_seq *s, struct record *record, | 168 | static int drv_bss_info_changed(struct trace_seq *s, struct record *record, |
169 | struct event_format *event) | 169 | struct event_format *event, void *context) |
170 | { | 170 | { |
171 | void *data = record->data; | 171 | void *data = record->data; |
172 | 172 | ||
@@ -194,7 +194,7 @@ static int drv_bss_info_changed(struct trace_seq *s, struct record *record, | |||
194 | } | 194 | } |
195 | 195 | ||
196 | static int drv_config(struct trace_seq *s, struct record *record, | 196 | static int drv_config(struct trace_seq *s, struct record *record, |
197 | struct event_format *event) | 197 | struct event_format *event, void *context) |
198 | { | 198 | { |
199 | void *data = record->data; | 199 | void *data = record->data; |
200 | 200 | ||
@@ -221,9 +221,9 @@ static int drv_config(struct trace_seq *s, struct record *record, | |||
221 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | 221 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) |
222 | { | 222 | { |
223 | pevent_register_event_handler(pevent, -1, "mac80211", "drv_bss_info_changed", | 223 | pevent_register_event_handler(pevent, -1, "mac80211", "drv_bss_info_changed", |
224 | drv_bss_info_changed); | 224 | drv_bss_info_changed, NULL); |
225 | pevent_register_event_handler(pevent, -1, "mac80211", "drv_config", | 225 | pevent_register_event_handler(pevent, -1, "mac80211", "drv_config", |
226 | drv_config); | 226 | drv_config, NULL); |
227 | 227 | ||
228 | return 0; | 228 | return 0; |
229 | } | 229 | } |
diff --git a/plugin_sched_switch.c b/plugin_sched_switch.c index 358c764..01e8298 100644 --- a/plugin_sched_switch.c +++ b/plugin_sched_switch.c | |||
@@ -68,7 +68,7 @@ static void write_state(struct trace_seq *s, int val) | |||
68 | } | 68 | } |
69 | 69 | ||
70 | static int sched_wakeup_handler(struct trace_seq *s, struct record *record, | 70 | static int sched_wakeup_handler(struct trace_seq *s, struct record *record, |
71 | struct event_format *event) | 71 | struct event_format *event, void *context) |
72 | { | 72 | { |
73 | struct format_field *field; | 73 | struct format_field *field; |
74 | unsigned long long val; | 74 | unsigned long long val; |
@@ -126,7 +126,7 @@ static int sched_wakeup_handler(struct trace_seq *s, struct record *record, | |||
126 | } | 126 | } |
127 | 127 | ||
128 | static int sched_switch_handler(struct trace_seq *s, struct record *record, | 128 | static int sched_switch_handler(struct trace_seq *s, struct record *record, |
129 | struct event_format *event) | 129 | struct event_format *event, void *context) |
130 | { | 130 | { |
131 | struct format_field *field; | 131 | struct format_field *field; |
132 | unsigned long long val; | 132 | unsigned long long val; |
@@ -175,13 +175,13 @@ static int sched_switch_handler(struct trace_seq *s, struct record *record, | |||
175 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) | 175 | int PEVENT_PLUGIN_LOADER(struct pevent *pevent) |
176 | { | 176 | { |
177 | pevent_register_event_handler(pevent, -1, "sched", "sched_switch", | 177 | pevent_register_event_handler(pevent, -1, "sched", "sched_switch", |
178 | sched_switch_handler); | 178 | sched_switch_handler, NULL); |
179 | 179 | ||
180 | pevent_register_event_handler(pevent, -1, "sched", "sched_wakeup", | 180 | pevent_register_event_handler(pevent, -1, "sched", "sched_wakeup", |
181 | sched_wakeup_handler); | 181 | sched_wakeup_handler, NULL); |
182 | 182 | ||
183 | pevent_register_event_handler(pevent, -1, "sched", "sched_wakeup_new", | 183 | pevent_register_event_handler(pevent, -1, "sched", "sched_wakeup_new", |
184 | sched_wakeup_handler); | 184 | sched_wakeup_handler, NULL); |
185 | 185 | ||
186 | return 0; | 186 | return 0; |
187 | } | 187 | } |
diff --git a/trace-ftrace.c b/trace-ftrace.c index 4e6f61d..af9ac8d 100644 --- a/trace-ftrace.c +++ b/trace-ftrace.c | |||
@@ -49,7 +49,7 @@ static int get_field_val(struct trace_seq *s, void *data, | |||
49 | } | 49 | } |
50 | 50 | ||
51 | static int function_handler(struct trace_seq *s, struct record *record, | 51 | static int function_handler(struct trace_seq *s, struct record *record, |
52 | struct event_format *event) | 52 | struct event_format *event, void *context) |
53 | { | 53 | { |
54 | struct pevent *pevent = event->pevent; | 54 | struct pevent *pevent = event->pevent; |
55 | unsigned long long function; | 55 | unsigned long long function; |
@@ -241,7 +241,7 @@ static int print_graph_nested(struct trace_seq *s, | |||
241 | 241 | ||
242 | static int | 242 | static int |
243 | fgraph_ent_handler(struct trace_seq *s, struct record *record, | 243 | fgraph_ent_handler(struct trace_seq *s, struct record *record, |
244 | struct event_format *event) | 244 | struct event_format *event, void *context) |
245 | { | 245 | { |
246 | struct record *rec; | 246 | struct record *rec; |
247 | unsigned long long val, pid; | 247 | unsigned long long val, pid; |
@@ -273,7 +273,7 @@ fgraph_ent_handler(struct trace_seq *s, struct record *record, | |||
273 | 273 | ||
274 | static int | 274 | static int |
275 | fgraph_ret_handler(struct trace_seq *s, struct record *record, | 275 | fgraph_ret_handler(struct trace_seq *s, struct record *record, |
276 | struct event_format *event) | 276 | struct event_format *event, void *context) |
277 | { | 277 | { |
278 | unsigned long long rettime, calltime; | 278 | unsigned long long rettime, calltime; |
279 | unsigned long long duration, depth; | 279 | unsigned long long duration, depth; |
@@ -308,7 +308,7 @@ fgraph_ret_handler(struct trace_seq *s, struct record *record, | |||
308 | 308 | ||
309 | static int | 309 | static int |
310 | trace_stack_handler(struct trace_seq *s, struct record *record, | 310 | trace_stack_handler(struct trace_seq *s, struct record *record, |
311 | struct event_format *event) | 311 | struct event_format *event, void *context) |
312 | { | 312 | { |
313 | struct format_field *field; | 313 | struct format_field *field; |
314 | unsigned long long addr; | 314 | unsigned long long addr; |
@@ -350,16 +350,16 @@ int tracecmd_ftrace_overrides(struct tracecmd_input *handle) | |||
350 | pevent = tracecmd_get_pevent(handle); | 350 | pevent = tracecmd_get_pevent(handle); |
351 | 351 | ||
352 | pevent_register_event_handler(pevent, -1, "ftrace", "function", | 352 | pevent_register_event_handler(pevent, -1, "ftrace", "function", |
353 | function_handler); | 353 | function_handler, NULL); |
354 | 354 | ||
355 | pevent_register_event_handler(pevent, -1, "ftrace", "funcgraph_entry", | 355 | pevent_register_event_handler(pevent, -1, "ftrace", "funcgraph_entry", |
356 | fgraph_ent_handler); | 356 | fgraph_ent_handler, NULL); |
357 | 357 | ||
358 | pevent_register_event_handler(pevent, -1, "ftrace", "funcgraph_exit", | 358 | pevent_register_event_handler(pevent, -1, "ftrace", "funcgraph_exit", |
359 | fgraph_ret_handler); | 359 | fgraph_ret_handler, NULL); |
360 | 360 | ||
361 | pevent_register_event_handler(pevent, -1, "ftrace", "kernel_stack", | 361 | pevent_register_event_handler(pevent, -1, "ftrace", "kernel_stack", |
362 | trace_stack_handler); | 362 | trace_stack_handler, NULL); |
363 | 363 | ||
364 | /* Store the func ret id and event for later use */ | 364 | /* Store the func ret id and event for later use */ |
365 | event = pevent_find_event_by_name(pevent, "ftrace", "funcgraph_exit"); | 365 | event = pevent_find_event_by_name(pevent, "ftrace", "funcgraph_exit"); |