diff options
Diffstat (limited to 'plugin_sched_switch.c')
-rw-r--r-- | plugin_sched_switch.c | 56 |
1 files changed, 16 insertions, 40 deletions
diff --git a/plugin_sched_switch.c b/plugin_sched_switch.c index 01e8298..7490e16 100644 --- a/plugin_sched_switch.c +++ b/plugin_sched_switch.c | |||
@@ -24,28 +24,6 @@ | |||
24 | 24 | ||
25 | #include "trace-cmd.h" | 25 | #include "trace-cmd.h" |
26 | 26 | ||
27 | static int get_field_val(struct trace_seq *s, void *data, | ||
28 | struct event_format *event, const char *name, | ||
29 | unsigned long long *val, int fail) | ||
30 | { | ||
31 | struct format_field *field; | ||
32 | |||
33 | field = pevent_find_any_field(event, name); | ||
34 | if (!field) { | ||
35 | if (fail) | ||
36 | trace_seq_printf(s, "<CANT FIND FIELD %s>", name); | ||
37 | return -1; | ||
38 | } | ||
39 | |||
40 | if (pevent_read_number_field(field, data, val)) { | ||
41 | if (fail) | ||
42 | trace_seq_printf(s, " %s=INVALID", name); | ||
43 | return -1; | ||
44 | } | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static void write_state(struct trace_seq *s, int val) | 27 | static void write_state(struct trace_seq *s, int val) |
50 | { | 28 | { |
51 | const char states[] = "SDTtZXxW"; | 29 | const char states[] = "SDTtZXxW"; |
@@ -72,54 +50,53 @@ static int sched_wakeup_handler(struct trace_seq *s, struct record *record, | |||
72 | { | 50 | { |
73 | struct format_field *field; | 51 | struct format_field *field; |
74 | unsigned long long val; | 52 | unsigned long long val; |
75 | void *data = record->data; | ||
76 | 53 | ||
77 | if (get_field_val(s, data, event, "common_pid", &val, 1)) | 54 | if (pevent_get_common_field_val(s, event, "common_pid", record, &val, 1)) |
78 | return trace_seq_putc(s, '!'); | 55 | return trace_seq_putc(s, '!'); |
79 | 56 | ||
80 | trace_seq_printf(s, "%lld:", val); | 57 | trace_seq_printf(s, "%lld:", val); |
81 | 58 | ||
82 | if (get_field_val(s, data, event, "prev_prio", &val, 0)) | 59 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0)) |
83 | trace_seq_puts(s, "?:"); | 60 | trace_seq_puts(s, "?:"); |
84 | else | 61 | else |
85 | trace_seq_printf(s, "%lld:", val); | 62 | trace_seq_printf(s, "%lld:", val); |
86 | 63 | ||
87 | if (get_field_val(s, data, event, "prev_state", &val, 0)) | 64 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 0)) |
88 | trace_seq_putc(s, '?'); | 65 | trace_seq_putc(s, '?'); |
89 | else | 66 | else |
90 | write_state(s, val); | 67 | write_state(s, val); |
91 | 68 | ||
92 | trace_seq_puts(s, " + "); | 69 | trace_seq_puts(s, " + "); |
93 | 70 | ||
94 | if (get_field_val(s, data, event, "pid", &val, 1)) | 71 | if (pevent_get_field_val(s, event, "pid", record, &val, 1)) |
95 | return trace_seq_putc(s, '!'); | 72 | return trace_seq_putc(s, '!'); |
96 | 73 | ||
97 | trace_seq_printf(s, "%lld:", val); | 74 | trace_seq_printf(s, "%lld:", val); |
98 | 75 | ||
99 | if (get_field_val(s, data, event, "prio", &val, 1)) | 76 | if (pevent_get_field_val(s, event, "prio", record, &val, 1)) |
100 | return trace_seq_putc(s, '!'); | 77 | return trace_seq_putc(s, '!'); |
101 | 78 | ||
102 | trace_seq_printf(s, "%lld:", val); | 79 | trace_seq_printf(s, "%lld:", val); |
103 | 80 | ||
104 | if (get_field_val(s, data, event, "state", &val, 0)) | 81 | if (pevent_get_field_val(s, event, "state", record, &val, 0)) |
105 | trace_seq_putc(s, '?'); | 82 | trace_seq_putc(s, '?'); |
106 | else | 83 | else |
107 | write_state(s, val); | 84 | write_state(s, val); |
108 | 85 | ||
109 | trace_seq_putc(s, ' '); | 86 | trace_seq_putc(s, ' '); |
110 | 87 | ||
111 | field = pevent_find_any_field(event, "comm"); | 88 | field = pevent_find_field(event, "comm"); |
112 | if (!field) { | 89 | if (!field) { |
113 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "next_comm"); | 90 | trace_seq_printf(s, "<CANT FIND FIELD %s>", "next_comm"); |
114 | return trace_seq_putc(s, '!'); | 91 | return trace_seq_putc(s, '!'); |
115 | } | 92 | } |
116 | 93 | ||
117 | trace_seq_printf(s, "%.*s", field->size, (char *)(data + field->offset)); | 94 | trace_seq_printf(s, "%.*s", field->size, (char *)(record->data + field->offset)); |
118 | 95 | ||
119 | if (get_field_val(s, data, event, "target_cpu", &val, 0) == 0) | 96 | if (pevent_get_field_val(s, event, "target_cpu", record, &val, 0) == 0) |
120 | trace_seq_printf(s, " [%03llu]", val); | 97 | trace_seq_printf(s, " [%03llu]", val); |
121 | 98 | ||
122 | if (get_field_val(s, data, event, "success", &val, 0) == 0) | 99 | if (pevent_get_field_val(s, event, "success", record, &val, 0) == 0) |
123 | trace_seq_puts(s, val ? " Success" : " Failed"); | 100 | trace_seq_puts(s, val ? " Success" : " Failed"); |
124 | 101 | ||
125 | return 0; | 102 | return 0; |
@@ -130,31 +107,30 @@ static int sched_switch_handler(struct trace_seq *s, struct record *record, | |||
130 | { | 107 | { |
131 | struct format_field *field; | 108 | struct format_field *field; |
132 | unsigned long long val; | 109 | unsigned long long val; |
133 | void *data = record->data; | ||
134 | 110 | ||
135 | if (get_field_val(s, data, event, "prev_pid", &val, 1)) | 111 | if (pevent_get_field_val(s, event, "prev_pid", record, &val, 1)) |
136 | return trace_seq_putc(s, '!'); | 112 | return trace_seq_putc(s, '!'); |
137 | 113 | ||
138 | trace_seq_printf(s, "%lld:", val); | 114 | trace_seq_printf(s, "%lld:", val); |
139 | 115 | ||
140 | if (get_field_val(s, data, event, "prev_prio", &val, 1)) | 116 | if (pevent_get_field_val(s, event, "prev_prio", record, &val, 1)) |
141 | return trace_seq_putc(s, '!'); | 117 | return trace_seq_putc(s, '!'); |
142 | 118 | ||
143 | trace_seq_printf(s, "%lld:", val); | 119 | trace_seq_printf(s, "%lld:", val); |
144 | 120 | ||
145 | if (get_field_val(s, data, event, "prev_state", &val, 1)) | 121 | if (pevent_get_field_val(s, event, "prev_state", record, &val, 1)) |
146 | return trace_seq_putc(s, '!'); | 122 | return trace_seq_putc(s, '!'); |
147 | 123 | ||
148 | write_state(s, val); | 124 | write_state(s, val); |
149 | 125 | ||
150 | trace_seq_puts(s, " ==> "); | 126 | trace_seq_puts(s, " ==> "); |
151 | 127 | ||
152 | if (get_field_val(s, data, event, "next_pid", &val, 1)) | 128 | if (pevent_get_field_val(s, event, "next_pid", record, &val, 1)) |
153 | return trace_seq_putc(s, '!'); | 129 | return trace_seq_putc(s, '!'); |
154 | 130 | ||
155 | trace_seq_printf(s, "%lld:", val); | 131 | trace_seq_printf(s, "%lld:", val); |
156 | 132 | ||
157 | if (get_field_val(s, data, event, "next_prio", &val, 1)) | 133 | if (pevent_get_field_val(s, event, "next_prio", record, &val, 1)) |
158 | return trace_seq_putc(s, '!'); | 134 | return trace_seq_putc(s, '!'); |
159 | 135 | ||
160 | trace_seq_printf(s, "%lld:", val); | 136 | trace_seq_printf(s, "%lld:", val); |
@@ -167,7 +143,7 @@ static int sched_switch_handler(struct trace_seq *s, struct record *record, | |||
167 | return trace_seq_putc(s, '!'); | 143 | return trace_seq_putc(s, '!'); |
168 | } | 144 | } |
169 | 145 | ||
170 | trace_seq_printf(s, "%.*s", field->size, (char *)(data + field->offset)); | 146 | trace_seq_printf(s, "%.*s", field->size, (char *)(record->data + field->offset)); |
171 | 147 | ||
172 | return 0; | 148 | return 0; |
173 | } | 149 | } |