aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parse-events.c10
-rw-r--r--parse-events.h6
-rw-r--r--plugin_hrtimer.c8
-rw-r--r--plugin_kmem.c16
-rw-r--r--plugin_mac80211.c8
-rw-r--r--plugin_sched_switch.c10
-rw-r--r--trace-ftrace.c16
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
64struct pevent_func_params { 65struct 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 */
4455int pevent_register_event_handler(struct pevent *pevent, 4458int 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
88typedef int (*pevent_event_handler_func)(struct trace_seq *s, 88typedef 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
92typedef int (*pevent_plugin_load_func)(struct pevent *pevent); 93typedef int (*pevent_plugin_load_func)(struct pevent *pevent);
93typedef int (*pevent_plugin_unload_func)(void); 94typedef 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
235enum { 237enum {
@@ -428,7 +430,7 @@ int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long siz
428int pevent_parse_event(struct pevent *pevent, char *buf, unsigned long size, char *sys); 430int pevent_parse_event(struct pevent *pevent, char *buf, unsigned long size, char *sys);
429 431
430int pevent_register_event_handler(struct pevent *pevent, int id, char *sys_name, char *event_name, 432int 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);
432int pevent_register_print_function(struct pevent *pevent, 434int 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
54static int timer_expire_handler(struct trace_seq *s, struct record *record, 54static 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
71static int timer_start_handler(struct trace_seq *s, struct record *record, 71static 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,
106int PEVENT_PLUGIN_LOADER(struct pevent *pevent) 106int 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
27static int call_site_handler(struct trace_seq *s, struct record *record, 27static 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,
52int PEVENT_PLUGIN_LOADER(struct pevent *pevent) 52int 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
168static int drv_bss_info_changed(struct trace_seq *s, struct record *record, 168static 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
196static int drv_config(struct trace_seq *s, struct record *record, 196static 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,
221int PEVENT_PLUGIN_LOADER(struct pevent *pevent) 221int 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
70static int sched_wakeup_handler(struct trace_seq *s, struct record *record, 70static 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
128static int sched_switch_handler(struct trace_seq *s, struct record *record, 128static 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,
175int PEVENT_PLUGIN_LOADER(struct pevent *pevent) 175int 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
51static int function_handler(struct trace_seq *s, struct record *record, 51static 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
242static int 242static int
243fgraph_ent_handler(struct trace_seq *s, struct record *record, 243fgraph_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
274static int 274static int
275fgraph_ret_handler(struct trace_seq *s, struct record *record, 275fgraph_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
309static int 309static int
310trace_stack_handler(struct trace_seq *s, struct record *record, 310trace_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");