aboutsummaryrefslogtreecommitdiffstats
path: root/plugin_sched_switch.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugin_sched_switch.c')
-rw-r--r--plugin_sched_switch.c56
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
27static 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
49static void write_state(struct trace_seq *s, int val) 27static 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}