diff options
author | Steven Rostedt <srostedt@redhat.com> | 2009-12-18 10:52:15 -0500 |
---|---|---|
committer | Steven Rostedt <rostedt@goodmis.org> | 2009-12-18 10:52:15 -0500 |
commit | 36f9ea18b58d7db2714651f324d95e841a8ef41c (patch) | |
tree | 619957d93de0c8cfd68fdbb28bfa4b284d635a91 | |
parent | 398ed04f52d71aada31676462234367f70f99dd6 (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.c | 21 | ||||
-rw-r--r-- | parse-events.h | 11 | ||||
-rw-r--r-- | plugin_hrtimer.c | 13 | ||||
-rw-r--r-- | plugin_mac80211.c | 14 | ||||
-rw-r--r-- | plugin_sched_switch.c | 12 | ||||
-rw-r--r-- | trace-ftrace.c | 25 | ||||
-rw-r--r-- | trace-read.c | 2 |
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 | */ |
3115 | void pevent_data_lat_fmt(struct pevent *pevent, | 3115 | void 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 | */ |
3217 | void pevent_event_info(struct trace_seq *s, struct event_format *event, | 3218 | void 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 | ||
3228 | void pevent_print_event(struct pevent *pevent, struct trace_seq *s, | 3229 | void 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; | |||
61 | struct event_format; | 61 | struct event_format; |
62 | 62 | ||
63 | typedef int (*pevent_event_handler_func)(struct trace_seq *s, | 63 | typedef 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 | ||
68 | typedef int (*pevent_plugin_load_func)(struct pevent *pevent); | 67 | typedef int (*pevent_plugin_load_func)(struct pevent *pevent); |
69 | 68 | ||
@@ -350,7 +349,7 @@ int pevent_register_print_string(struct pevent *pevent, char *fmt, | |||
350 | int pevent_pid_is_registered(struct pevent *pevent, int pid); | 349 | int pevent_pid_is_registered(struct pevent *pevent, int pid); |
351 | 350 | ||
352 | void pevent_print_event(struct pevent *pevent, struct trace_seq *s, | 351 | void 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 | ||
355 | int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long size); | 354 | int pevent_parse_header_page(struct pevent *pevent, char *buf, unsigned long size); |
356 | 355 | ||
@@ -374,13 +373,13 @@ struct event_format * | |||
374 | pevent_find_event_by_name(struct pevent *pevent, const char *sys, const char *name); | 373 | pevent_find_event_by_name(struct pevent *pevent, const char *sys, const char *name); |
375 | 374 | ||
376 | void pevent_data_lat_fmt(struct pevent *pevent, | 375 | void 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); |
378 | int pevent_data_type(struct pevent *pevent, struct record *rec); | 377 | int pevent_data_type(struct pevent *pevent, struct record *rec); |
379 | struct event_format *pevent_data_event_from_type(struct pevent *pevent, int type); | 378 | struct event_format *pevent_data_event_from_type(struct pevent *pevent, int type); |
380 | int pevent_data_pid(struct pevent *pevent, struct record *rec); | 379 | int pevent_data_pid(struct pevent *pevent, struct record *rec); |
381 | const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid); | 380 | const char *pevent_data_comm_from_pid(struct pevent *pevent, int pid); |
382 | void pevent_event_info(struct trace_seq *s, struct event_format *event, | 381 | void 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 | ||
385 | struct event_format **pevent_list_events(struct pevent *pevent, enum event_sort_type); | 384 | struct 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 | ||
33 | static int timer_expire_handler(struct trace_seq *s, void *data, int size, | 33 | static 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 | ||
49 | static int timer_start_handler(struct trace_seq *s, void *data, int size, | 50 | static 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 | ||
148 | static int drv_bss_info_changed(struct trace_seq *s, void *data, int size, | 148 | static 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 | ||
175 | static int drv_config(struct trace_seq *s, void *data, | 176 | static 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 | ||
50 | static int sched_wakeup_handler(struct trace_seq *s, void *data, int size, | 50 | static 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 | ||
105 | static int sched_switch_handler(struct trace_seq *s, void *data, int size, | 105 | static 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 | ||
31 | static int function_handler(struct trace_seq *s, void *data, int size, | 31 | static 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 | ||
222 | static int | 222 | static int |
223 | fgraph_ent_handler(struct trace_seq *s, void *data, int size, | 223 | fgraph_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 | ||
260 | static int | 261 | static int |
261 | fgraph_ret_handler(struct trace_seq *s, void *data, int size, | 262 | fgraph_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 | ||
293 | static int | 294 | static int |
294 | trace_stack_handler(struct trace_seq *s, void *data, int size, | 295 | trace_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 | ||