aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteven Rostedt <srostedt@redhat.com>2009-12-18 10:52:15 -0500
committerSteven Rostedt <rostedt@goodmis.org>2009-12-18 10:52:15 -0500
commit36f9ea18b58d7db2714651f324d95e841a8ef41c (patch)
tree619957d93de0c8cfd68fdbb28bfa4b284d635a91
parent398ed04f52d71aada31676462234367f70f99dd6 (diff)
trace-cmd: Pass in record to pevent functions
Instead of passing in the data, size and timestamp to the pevent parsing routines, pass in the record itself. This allows the pevent parsing routines to have a bit more control and facilitates the need of future work where we need to know more about the record in the parser. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
-rw-r--r--parse-events.c21
-rw-r--r--parse-events.h11
-rw-r--r--plugin_hrtimer.c13
-rw-r--r--plugin_mac80211.c14
-rw-r--r--plugin_sched_switch.c12
-rw-r--r--trace-ftrace.c25
-rw-r--r--trace-read.c2
7 files changed, 52 insertions, 46 deletions
diff --git a/parse-events.c b/parse-events.c
index 49cde00..d53184b 100644
--- a/parse-events.c
+++ b/parse-events.c
@@ -3113,13 +3113,14 @@ static void pretty_print(struct trace_seq *s, void *data, int size, struct event
3113 * and lock depth) and places it into the trace_seq. 3113 * and lock depth) and places it into the trace_seq.
3114 */ 3114 */
3115void pevent_data_lat_fmt(struct pevent *pevent, 3115void pevent_data_lat_fmt(struct pevent *pevent,
3116 struct trace_seq *s, void *data, int size __unused) 3116 struct trace_seq *s, struct record *record)
3117{ 3117{
3118 unsigned int lat_flags; 3118 unsigned int lat_flags;
3119 unsigned int pc; 3119 unsigned int pc;
3120 int lock_depth; 3120 int lock_depth;
3121 int hardirq; 3121 int hardirq;
3122 int softirq; 3122 int softirq;
3123 void *data = record->data;
3123 3124
3124 lat_flags = parse_common_flags(pevent, data); 3125 lat_flags = parse_common_flags(pevent, data);
3125 pc = parse_common_pc(pevent, data); 3126 pc = parse_common_pc(pevent, data);
@@ -3215,30 +3216,32 @@ const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid)
3215 * writes the print format into the trace_seq. 3216 * writes the print format into the trace_seq.
3216 */ 3217 */
3217void pevent_event_info(struct trace_seq *s, struct event_format *event, 3218void pevent_event_info(struct trace_seq *s, struct event_format *event,
3218 int cpu, void *data, int size, unsigned long long nsecs) 3219 int cpu, struct record *record)
3219{ 3220{
3220 if (event->handler) 3221 if (event->handler)
3221 event->handler(s, data, size, event, cpu, nsecs); 3222 event->handler(s, record, event, cpu);
3222 else 3223 else
3223 pretty_print(s, data, size, event); 3224 pretty_print(s, record->data, record->size, event);
3224 3225
3225 trace_seq_terminate(s); 3226 trace_seq_terminate(s);
3226} 3227}
3227 3228
3228void pevent_print_event(struct pevent *pevent, struct trace_seq *s, 3229void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
3229 int cpu, void *data, int size, unsigned long long nsecs) 3230 int cpu, struct record *record)
3230{ 3231{
3231 static char *spaces = " "; /* 20 spaces */ 3232 static char *spaces = " "; /* 20 spaces */
3232 struct event_format *event; 3233 struct event_format *event;
3233 unsigned long secs; 3234 unsigned long secs;
3234 unsigned long usecs; 3235 unsigned long usecs;
3235 const char *comm; 3236 const char *comm;
3237 void *data = record->data;
3238 int size = record->size;
3236 int type; 3239 int type;
3237 int pid; 3240 int pid;
3238 int len; 3241 int len;
3239 3242
3240 secs = nsecs / NSECS_PER_SEC; 3243 secs = record->ts / NSECS_PER_SEC;
3241 usecs = nsecs - secs * NSECS_PER_SEC; 3244 usecs = record->ts - secs * NSECS_PER_SEC;
3242 usecs = usecs / NSECS_PER_USEC; 3245 usecs = usecs / NSECS_PER_USEC;
3243 3246
3244 type = trace_parse_common_type(pevent, data); 3247 type = trace_parse_common_type(pevent, data);
@@ -3255,7 +3258,7 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
3255 if (pevent->latency_format) { 3258 if (pevent->latency_format) {
3256 trace_seq_printf(s, "%8.8s-%-5d %3d", 3259 trace_seq_printf(s, "%8.8s-%-5d %3d",
3257 comm, pid, cpu); 3260 comm, pid, cpu);
3258 pevent_data_lat_fmt(pevent, s, data, size); 3261 pevent_data_lat_fmt(pevent, s, record);
3259 } else 3262 } else
3260 trace_seq_printf(s, "%16s-%-5d [%03d]", comm, pid, cpu); 3263 trace_seq_printf(s, "%16s-%-5d [%03d]", comm, pid, cpu);
3261 3264
@@ -3267,7 +3270,7 @@ void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
3267 trace_seq_printf(s, "%.*s", 20 - len, spaces); 3270 trace_seq_printf(s, "%.*s", 20 - len, spaces);
3268 3271
3269 if (event->handler) 3272 if (event->handler)
3270 event->handler(s, data, size, event, cpu, nsecs); 3273 event->handler(s, record, event, cpu);
3271 else 3274 else
3272 pretty_print(s, data, size, event); 3275 pretty_print(s, data, size, event);
3273 3276
diff --git a/parse-events.h b/parse-events.h
index 9b64b9d..ba80efd 100644
--- a/parse-events.h
+++ b/parse-events.h
@@ -61,9 +61,8 @@ struct pevent;
61struct event_format; 61struct event_format;
62 62
63typedef int (*pevent_event_handler_func)(struct trace_seq *s, 63typedef int (*pevent_event_handler_func)(struct trace_seq *s,
64 void *data, int size, 64 struct record *record,
65 struct event_format *event, int cpu, 65 struct event_format *event, int cpu);
66 unsigned long long nsecs);
67 66
68typedef int (*pevent_plugin_load_func)(struct pevent *pevent); 67typedef int (*pevent_plugin_load_func)(struct pevent *pevent);
69 68
@@ -350,7 +349,7 @@ int pevent_register_print_string(struct pevent *pevent, char *fmt,
350int pevent_pid_is_registered(struct pevent *pevent, int pid); 349int pevent_pid_is_registered(struct pevent *pevent, int pid);
351 350
352void pevent_print_event(struct pevent *pevent, struct trace_seq *s, 351void pevent_print_event(struct pevent *pevent, struct trace_seq *s,
353 int cpu, void *data, int size, unsigned long long nsecs); 352 int cpu, struct record *record);
354 353
355int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long size); 354int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long size);
356 355
@@ -374,13 +373,13 @@ struct event_format *
374pevent_find_event_by_name(struct pevent *pevent, const char *sys, const char *name); 373pevent_find_event_by_name(struct pevent *pevent, const char *sys, const char *name);
375 374
376void pevent_data_lat_fmt(struct pevent *pevent, 375void pevent_data_lat_fmt(struct pevent *pevent,
377 struct trace_seq *s, void *data, int size __unused); 376 struct trace_seq *s, struct record *record);
378int pevent_data_type(struct pevent *pevent, struct record *rec); 377int pevent_data_type(struct pevent *pevent, struct record *rec);
379struct event_format *pevent_data_event_from_type(struct pevent *pevent, int type); 378struct event_format *pevent_data_event_from_type(struct pevent *pevent, int type);
380int pevent_data_pid(struct pevent *pevent, struct record *rec); 379int pevent_data_pid(struct pevent *pevent, struct record *rec);
381const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid); 380const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid);
382void pevent_event_info(struct trace_seq *s, struct event_format *event, 381void pevent_event_info(struct trace_seq *s, struct event_format *event,
383 int cpu, void *data, int size, unsigned long long nsecs); 382 int cpu, struct record *record);
384 383
385struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type); 384struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type);
386 385
diff --git a/plugin_hrtimer.c b/plugin_hrtimer.c
index 01f8ff3..2833f1b 100644
--- a/plugin_hrtimer.c
+++ b/plugin_hrtimer.c
@@ -30,10 +30,11 @@ static void print_field(struct trace_seq *s, const char *fmt,
30 trace_seq_printf(s, "CAN'T FIND FIELD \"%s\"", name); 30 trace_seq_printf(s, "CAN'T FIND FIELD \"%s\"", name);
31} 31}
32 32
33static int timer_expire_handler(struct trace_seq *s, void *data, int size, 33static int timer_expire_handler(struct trace_seq *s, struct record *record,
34 struct event_format *event, int cpu, 34 struct event_format *event, int cpu)
35 unsigned long long nsecs)
36{ 35{
36 void *data = record->data;
37
37 trace_seq_printf(s, "hrtimer="); 38 trace_seq_printf(s, "hrtimer=");
38 39
39 if (_print_field(s, "0x%llx", event, "timer", data) == -1) 40 if (_print_field(s, "0x%llx", event, "timer", data) == -1)
@@ -46,12 +47,12 @@ static int timer_expire_handler(struct trace_seq *s, void *data, int size,
46 return 0; 47 return 0;
47} 48}
48 49
49static int timer_start_handler(struct trace_seq *s, void *data, int size, 50static int timer_start_handler(struct trace_seq *s, struct record *record,
50 struct event_format *event, int cpu, 51 struct event_format *event, int cpu)
51 unsigned long long nsecs)
52{ 52{
53 struct pevent *pevent = event->pevent; 53 struct pevent *pevent = event->pevent;
54 struct format_field *fn = pevent_find_field(event, "function"); 54 struct format_field *fn = pevent_find_field(event, "function");
55 void *data = record->data;
55 56
56 trace_seq_printf(s, "hrtimer="); 57 trace_seq_printf(s, "hrtimer=");
57 58
diff --git a/plugin_mac80211.c b/plugin_mac80211.c
index 766d9ce..dd76d7c 100644
--- a/plugin_mac80211.c
+++ b/plugin_mac80211.c
@@ -145,10 +145,11 @@ static void _print_flag(struct trace_seq *s, struct event_format *event,
145#define SFX(fn) _print_field(s, fn ":%#x", event, fn, data) 145#define SFX(fn) _print_field(s, fn ":%#x", event, fn, data)
146#define SP() trace_seq_putc(s, ' ') 146#define SP() trace_seq_putc(s, ' ')
147 147
148static int drv_bss_info_changed(struct trace_seq *s, void *data, int size, 148static int drv_bss_info_changed(struct trace_seq *s, struct record *record,
149 struct event_format *event, int cpu, 149 struct event_format *event, int cpu)
150 unsigned long long nsecs)
151{ 150{
151 void *data = record->data;
152
152 print_string(s, event, "wiphy_name", data); 153 print_string(s, event, "wiphy_name", data);
153 trace_seq_printf(s, " vif:"); 154 trace_seq_printf(s, " vif:");
154 print_string(s, event, "vif_name", data); 155 print_string(s, event, "vif_name", data);
@@ -172,10 +173,11 @@ static int drv_bss_info_changed(struct trace_seq *s, void *data, int size,
172 return 0; 173 return 0;
173} 174}
174 175
175static int drv_config(struct trace_seq *s, void *data, 176static int drv_config(struct trace_seq *s, struct record *record,
176 int size, struct event_format *event, int cpu, 177 struct event_format *event, int cpu)
177 unsigned long long nsecs)
178{ 178{
179 void *data = record->data;
180
179 print_string(s, event, "wiphy_name", data); 181 print_string(s, event, "wiphy_name", data);
180 trace_seq_putc(s, ' '); 182 trace_seq_putc(s, ' ');
181 print_flag(s, event, "flags", data, 183 print_flag(s, event, "flags", data,
diff --git a/plugin_sched_switch.c b/plugin_sched_switch.c
index 4690f2f..3cec83c 100644
--- a/plugin_sched_switch.c
+++ b/plugin_sched_switch.c
@@ -47,12 +47,12 @@ static void write_state(struct trace_seq *s, int val)
47 trace_seq_putc(s, 'R'); 47 trace_seq_putc(s, 'R');
48} 48}
49 49
50static int sched_wakeup_handler(struct trace_seq *s, void *data, int size, 50static int sched_wakeup_handler(struct trace_seq *s, struct record *record,
51 struct event_format *event, int cpu, 51 struct event_format *event, int cpu)
52 unsigned long long nsecs)
53{ 52{
54 struct format_field *field; 53 struct format_field *field;
55 unsigned long long val; 54 unsigned long long val;
55 void *data = record->data;
56 56
57 if (get_field_val(s, data, event, "common_pid", &val, 1)) 57 if (get_field_val(s, data, event, "common_pid", &val, 1))
58 return trace_seq_putc(s, '!'); 58 return trace_seq_putc(s, '!');
@@ -102,12 +102,12 @@ static int sched_wakeup_handler(struct trace_seq *s, void *data, int size,
102 return 0; 102 return 0;
103} 103}
104 104
105static int sched_switch_handler(struct trace_seq *s, void *data, int size, 105static int sched_switch_handler(struct trace_seq *s, struct record *record,
106 struct event_format *event, int cpu, 106 struct event_format *event, int cpu)
107 unsigned long long nsecs)
108{ 107{
109 struct format_field *field; 108 struct format_field *field;
110 unsigned long long val; 109 unsigned long long val;
110 void *data = record->data;
111 111
112 if (get_field_val(s, data, event, "prev_pid", &val, 1)) 112 if (get_field_val(s, data, event, "prev_pid", &val, 1))
113 return trace_seq_putc(s, '!'); 113 return trace_seq_putc(s, '!');
diff --git a/trace-ftrace.c b/trace-ftrace.c
index 9dfe04d..6b4ab8e 100644
--- a/trace-ftrace.c
+++ b/trace-ftrace.c
@@ -28,13 +28,13 @@ static int get_field_val(struct trace_seq *s, void *data,
28 return 0; 28 return 0;
29} 29}
30 30
31static int function_handler(struct trace_seq *s, void *data, int size, 31static int function_handler(struct trace_seq *s, struct record *record,
32 struct event_format *event, int cpu, 32 struct event_format *event, int cpu)
33 unsigned long long nsecs)
34{ 33{
35 struct pevent *pevent = event->pevent; 34 struct pevent *pevent = event->pevent;
36 unsigned long long function; 35 unsigned long long function;
37 const char *func; 36 const char *func;
37 void *data = record->data;
38 38
39 if (get_field_val(s, data, event, "ip", &function)) 39 if (get_field_val(s, data, event, "ip", &function))
40 return trace_seq_putc(s, '!'); 40 return trace_seq_putc(s, '!');
@@ -220,13 +220,14 @@ static int print_graph_nested(struct trace_seq *s,
220} 220}
221 221
222static int 222static int
223fgraph_ent_handler(struct trace_seq *s, void *data, int size, 223fgraph_ent_handler(struct trace_seq *s, struct record *record,
224 struct event_format *event, int cpu, 224 struct event_format *event, int cpu)
225 unsigned long long nsecs)
226{ 225{
227 struct record *rec; 226 struct record *rec;
228 void *copy_data; 227 void *copy_data;
229 unsigned long long val, pid; 228 unsigned long long val, pid;
229 void *data = record->data;
230 int size = record->size;
230 int ret; 231 int ret;
231 232
232 if (get_field_val(s, data, event, "common_pid", &pid)) 233 if (get_field_val(s, data, event, "common_pid", &pid))
@@ -258,12 +259,12 @@ fgraph_ent_handler(struct trace_seq *s, void *data, int size,
258} 259}
259 260
260static int 261static int
261fgraph_ret_handler(struct trace_seq *s, void *data, int size, 262fgraph_ret_handler(struct trace_seq *s, struct record *record,
262 struct event_format *event, int cpu, 263 struct event_format *event, int cpu)
263 unsigned long long nsecs)
264{ 264{
265 unsigned long long rettime, calltime; 265 unsigned long long rettime, calltime;
266 unsigned long long duration, depth; 266 unsigned long long duration, depth;
267 void *data = record->data;
267 int i; 268 int i;
268 269
269 if (get_field_val(s, data, event, "rettime", &rettime)) 270 if (get_field_val(s, data, event, "rettime", &rettime))
@@ -291,13 +292,13 @@ fgraph_ret_handler(struct trace_seq *s, void *data, int size,
291} 292}
292 293
293static int 294static int
294trace_stack_handler(struct trace_seq *s, void *data, int size, 295trace_stack_handler(struct trace_seq *s, struct record *record,
295 struct event_format *event, int cpu, 296 struct event_format *event, int cpu)
296 unsigned long long nsecs)
297{ 297{
298 struct format_field *field; 298 struct format_field *field;
299 unsigned long long addr; 299 unsigned long long addr;
300 const char *func; 300 const char *func;
301 void *data = record->data;
301 int ret; 302 int ret;
302 int i; 303 int i;
303 304
diff --git a/trace-read.c b/trace-read.c
index 5a5d4df..48bec1d 100644
--- a/trace-read.c
+++ b/trace-read.c
@@ -202,7 +202,7 @@ static void show_data(struct tracecmd_input *handle, int cpu)
202 test_save(record, cpu); 202 test_save(record, cpu);
203 203
204 trace_seq_init(&s); 204 trace_seq_init(&s);
205 pevent_print_event(pevent, &s, cpu, record->data, record->size, record->ts); 205 pevent_print_event(pevent, &s, cpu, record);
206 trace_seq_do_printf(&s); 206 trace_seq_do_printf(&s);
207 printf("\n"); 207 printf("\n");
208 208