aboutsummaryrefslogtreecommitdiffstats
path: root/include/litmus/sched_trace.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/litmus/sched_trace.h')
-rw-r--r--include/litmus/sched_trace.h175
1 files changed, 149 insertions, 26 deletions
diff --git a/include/litmus/sched_trace.h b/include/litmus/sched_trace.h
index 7ca34cb13881..96d7666aa22c 100644
--- a/include/litmus/sched_trace.h
+++ b/include/litmus/sched_trace.h
@@ -24,7 +24,8 @@ struct st_param_data { /* regular params */
24 u32 phase; 24 u32 phase;
25 u8 partition; 25 u8 partition;
26 u8 class; 26 u8 class;
27 u8 __unused[2]; 27 u8 level;
28 u8 __unused[1];
28}; 29};
29 30
30struct st_release_data { /* A job is was/is going to be released. */ 31struct st_release_data { /* A job is was/is going to be released. */
@@ -71,8 +72,8 @@ struct st_resume_data { /* A task resumes. */
71 72
72struct st_action_data { 73struct st_action_data {
73 u64 when; 74 u64 when;
74 u8 action; 75 u32 action;
75 u8 __unused[7]; 76 u8 __unused[4];
76}; 77};
77 78
78struct st_sys_release_data { 79struct st_sys_release_data {
@@ -164,34 +165,156 @@ feather_callback void do_sched_trace_sys_release(unsigned long id,
164 165
165#endif 166#endif
166 167
168#ifdef CONFIG_SCHED_LITMUS_TRACEPOINT
169
170#include <trace/events/litmus.h>
171
172#else
173
174#warning this is happeing
175
176/* Override trace macros to actually do nothing */
177#define trace_litmus_task_param(t)
178#define trace_litmus_task_release(t)
179#define trace_litmus_switch_to(t)
180#define trace_litmus_switch_away(prev)
181#define trace_litmus_task_completion(t, forced)
182#define trace_litmus_task_block(t, i)
183#define trace_litmus_task_resume(t, i)
184#define trace_litmus_sys_release(start)
185
186#define trace_litmus_resource_acquire(t, i);
187#define trace_litmus_resource_release(t, i);
188#define trace_litmus_priority_donate(t, d, i)
189
190#define trace_litmus_container_param(cid, name)
191#define trace_litmus_server_param(sid, cid, wcet, time)
192#define trace_litmus_server_switch_to(sid, job, tid, tjob)
193#define trace_litmus_server_switch_away(sid, job, tid, tjob)
194#define trace_litmus_server_release(sid, job, release, deadline)
195#define trace_litmus_server_completion(sid, job)
196
197#endif
198
167 199
168#define SCHED_TRACE_BASE_ID 500 200#define SCHED_TRACE_BASE_ID 500
169 201
170 202
171#define sched_trace_task_name(t) \ 203#define sched_trace_task_name(t) \
172 SCHED_TRACE(SCHED_TRACE_BASE_ID + 1, do_sched_trace_task_name, t) 204 SCHED_TRACE(SCHED_TRACE_BASE_ID + 1, \
173#define sched_trace_task_param(t) \ 205 do_sched_trace_task_name, t)
174 SCHED_TRACE(SCHED_TRACE_BASE_ID + 2, do_sched_trace_task_param, t) 206
175#define sched_trace_task_release(t) \ 207#define sched_trace_task_param(t) \
176 SCHED_TRACE(SCHED_TRACE_BASE_ID + 3, do_sched_trace_task_release, t) 208 do { \
177#define sched_trace_task_switch_to(t) \ 209 SCHED_TRACE(SCHED_TRACE_BASE_ID + 2, \
178 SCHED_TRACE(SCHED_TRACE_BASE_ID + 4, do_sched_trace_task_switch_to, t) 210 do_sched_trace_task_param, t); \
179#define sched_trace_task_switch_away(t) \ 211 trace_litmus_task_param(t); \
180 SCHED_TRACE(SCHED_TRACE_BASE_ID + 5, do_sched_trace_task_switch_away, t) 212 } while (0)
181#define sched_trace_task_completion(t, forced) \ 213
182 SCHED_TRACE2(SCHED_TRACE_BASE_ID + 6, do_sched_trace_task_completion, t, \ 214#define sched_trace_task_release(t) \
183 (unsigned long) forced) 215 do { \
184#define sched_trace_task_block(t) \ 216 SCHED_TRACE(SCHED_TRACE_BASE_ID + 3, \
185 SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, do_sched_trace_task_block, t) 217 do_sched_trace_task_release, t); \
186#define sched_trace_task_resume(t) \ 218 trace_litmus_task_release(t); \
187 SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, do_sched_trace_task_resume, t) 219 } while (0)
188#define sched_trace_action(t, action) \ 220
189 SCHED_TRACE2(SCHED_TRACE_BASE_ID + 9, do_sched_trace_action, t, \ 221#define sched_trace_task_switch_to(t) \
190 (unsigned long) action); 222 do { \
191/* when is a pointer, it does not need an explicit cast to unsigned long */ 223 SCHED_TRACE(SCHED_TRACE_BASE_ID + 4, \
192#define sched_trace_sys_release(when) \ 224 do_sched_trace_task_switch_to, t); \
193 SCHED_TRACE(SCHED_TRACE_BASE_ID + 10, do_sched_trace_sys_release, when) 225 trace_litmus_switch_to(t); \
226 } while (0)
227
228#define sched_trace_task_switch_away(t) \
229 do { \
230 SCHED_TRACE(SCHED_TRACE_BASE_ID + 5, \
231 do_sched_trace_task_switch_away, t); \
232 trace_litmus_switch_away(t); \
233 } while (0)
234
235#define sched_trace_task_completion(t, forced) \
236 do { \
237 SCHED_TRACE2(SCHED_TRACE_BASE_ID + 6, \
238 do_sched_trace_task_completion, t, \
239 (unsigned long) forced); \
240 trace_litmus_task_completion(t, forced); \
241 } while (0)
242
243#define sched_trace_task_block(t, i) \
244 do { \
245 SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, \
246 do_sched_trace_task_block, t); \
247 trace_litmus_task_block(t, i); \
248 } while (0)
249
250#define sched_trace_task_resume(t, i) \
251 do { \
252 SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, \
253 do_sched_trace_task_resume, t); \
254 trace_litmus_task_resume(t, i); \
255 } while (0)
256
257#define sched_trace_action(t, action) \
258 SCHED_TRACE2(SCHED_TRACE_BASE_ID + 9, \
259 do_sched_trace_action, t, (unsigned long) action);
194 260
261/* when is a pointer, it does not need an explicit cast to unsigned long */
262#define sched_trace_sys_release(when) \
263 do { \
264 SCHED_TRACE(SCHED_TRACE_BASE_ID + 10, \
265 do_sched_trace_sys_release, when); \
266 trace_litmus_sys_release(when); \
267 } while (0)
268
269#define QT_START lt_t _qt_start = litmus_clock()
270#define QT_END \
271 sched_trace_log_message("%d P%d [%s@%s:%d]: Took %llu\n\n", \
272 TRACE_ARGS, litmus_clock() - _qt_start)
273
274#define sched_trace_resource_acquire(t, i) \
275 do { \
276 trace_litmus_resource_acquire(t, i); \
277 } while (0)
278
279#define sched_trace_resource_release(t, i) \
280 do { \
281 trace_litmus_resource_release(t, i); \
282 } while (0)
283
284#define sched_trace_priority_donate(t, d, i) \
285 do { \
286 trace_litmus_priority_donate(t, d, i); \
287 } while (0)
288
289#define sched_trace_container_param(cid, name) \
290 do { \
291 trace_litmus_container_param(cid, name); \
292 } while (0)
293
294#define sched_trace_server_param(sid, cid, wcet, period) \
295 do { \
296 trace_litmus_server_param(sid, cid, wcet, period); \
297 } while(0)
298
299#define sched_trace_server_switch_to(sid, job, tid, tjob) \
300 do { \
301 trace_litmus_server_switch_to(sid, job, tid, tjob); \
302 } while(0)
303
304#define sched_trace_server_switch_away(sid, job, tid, tjob) \
305 do { \
306 trace_litmus_server_switch_away(sid, job, tid, tjob); \
307 } while (0)
308
309#define sched_trace_server_release(sid, job, rel, dead) \
310 do { \
311 trace_litmus_server_release(sid, job, rel, dead); \
312 } while (0)
313
314#define sched_trace_server_completion(sid, job) \
315 do { \
316 trace_litmus_server_completion(sid, job); \
317 } while (0)
195 318
196#define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ 319#define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */
197 320