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.h103
1 files changed, 98 insertions, 5 deletions
diff --git a/include/litmus/sched_trace.h b/include/litmus/sched_trace.h
index 82bde824129..2f992789aff 100644
--- a/include/litmus/sched_trace.h
+++ b/include/litmus/sched_trace.h
@@ -80,6 +80,17 @@ struct st_sys_release_data {
80 u64 release; 80 u64 release;
81}; 81};
82 82
83struct st_task_exit_data {
84 u64 avg_exec_time;
85 u64 max_exec_time;
86};
87
88struct st_task_tardy_data {
89 u64 total_tardy;
90 u32 max_tardy;
91 u32 missed;
92};
93
83#define DATA(x) struct st_ ## x ## _data x; 94#define DATA(x) struct st_ ## x ## _data x;
84 95
85typedef enum { 96typedef enum {
@@ -94,7 +105,9 @@ typedef enum {
94 ST_BLOCK, 105 ST_BLOCK,
95 ST_RESUME, 106 ST_RESUME,
96 ST_ACTION, 107 ST_ACTION,
97 ST_SYS_RELEASE 108 ST_SYS_RELEASE,
109 ST_TASK_EXIT,
110 ST_TASK_TARDY,
98} st_event_record_type_t; 111} st_event_record_type_t;
99 112
100struct st_event_record { 113struct st_event_record {
@@ -113,6 +126,8 @@ struct st_event_record {
113 DATA(resume); 126 DATA(resume);
114 DATA(action); 127 DATA(action);
115 DATA(sys_release); 128 DATA(sys_release);
129 DATA(task_exit);
130 DATA(task_tardy);
116 } data; 131 } data;
117}; 132};
118 133
@@ -154,6 +169,10 @@ feather_callback void do_sched_trace_action(unsigned long id,
154 unsigned long action); 169 unsigned long action);
155feather_callback void do_sched_trace_sys_release(unsigned long id, 170feather_callback void do_sched_trace_sys_release(unsigned long id,
156 lt_t* start); 171 lt_t* start);
172feather_callback void do_sched_trace_task_exit(unsigned long id,
173 struct task_struct* task);
174feather_callback void do_sched_trace_task_tardy(unsigned long id,
175 struct task_struct* task);
157 176
158#endif 177#endif
159 178
@@ -179,6 +198,15 @@ feather_callback void do_sched_trace_sys_release(unsigned long id,
179#define trace_litmus_task_block(t) 198#define trace_litmus_task_block(t)
180#define trace_litmus_task_resume(t) 199#define trace_litmus_task_resume(t)
181#define trace_litmus_sys_release(start) 200#define trace_litmus_sys_release(start)
201#define trace_litmus_task_exit(t)
202#define trace_litmus_task_tardy(t)
203
204#define trace_litmus_container_param(cid, name)
205#define trace_litmus_server_param(sid, cid, wcet, time)
206#define trace_litmus_server_switch_to(sid, job, tid)
207#define trace_litmus_server_switch_away(sid, job, tid)
208#define trace_litmus_server_release(sid, job, release, deadline)
209#define trace_litmus_server_completion(sid, job)
182 210
183#endif 211#endif
184 212
@@ -226,18 +254,34 @@ feather_callback void do_sched_trace_sys_release(unsigned long id,
226 trace_litmus_task_completion(t, forced); \ 254 trace_litmus_task_completion(t, forced); \
227 } while (0) 255 } while (0)
228 256
229#define sched_trace_task_block(t) \ 257#define sched_trace_task_block_on(t, i) \
230 do { \ 258 do { \
231 SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, \ 259 SCHED_TRACE(SCHED_TRACE_BASE_ID + 7, \
232 do_sched_trace_task_block, t); \ 260 do_sched_trace_task_block, t); \
233 trace_litmus_task_block(t); \ 261 trace_litmus_task_block(t, i); \
234 } while (0) 262 } while (0)
235 263
236#define sched_trace_task_resume(t) \ 264#define sched_trace_task_block(t) \
265 sched_trace_task_block_on(t, 0)
266
267#define sched_trace_task_resume_on(t, i) \
237 do { \ 268 do { \
238 SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, \ 269 SCHED_TRACE(SCHED_TRACE_BASE_ID + 8, \
239 do_sched_trace_task_resume, t); \ 270 do_sched_trace_task_resume, t); \
240 trace_litmus_task_resume(t); \ 271 trace_litmus_task_resume(t, i); \
272 } while (0)
273
274#define sched_trace_task_resume(t) \
275 sched_trace_task_resume_on(t, 0)
276
277#define sched_trace_resource_acquire(t, i) \
278 do { \
279 trace_litmus_resource_acquire(t, i); \
280 } while (0)
281
282#define sched_trace_resource_released(t, i) \
283 do { \
284 trace_litmus_resource_released(t, i); \
241 } while (0) 285 } while (0)
242 286
243#define sched_trace_action(t, action) \ 287#define sched_trace_action(t, action) \
@@ -252,6 +296,55 @@ feather_callback void do_sched_trace_sys_release(unsigned long id,
252 trace_litmus_sys_release(when); \ 296 trace_litmus_sys_release(when); \
253 } while (0) 297 } while (0)
254 298
299#define sched_trace_task_exit(t) \
300 do { \
301 SCHED_TRACE(SCHED_TRACE_BASE_ID + 11, \
302 do_sched_trace_task_exit, t); \
303 trace_litmus_task_exit(t); \
304 } while (0)
305
306
307#define sched_trace_task_tardy(t) \
308 do { \
309 SCHED_TRACE(SCHED_TRACE_BASE_ID + 12, \
310 do_sched_trace_task_tardy, t); \
311 } while (0)
312
313#define QT_START lt_t _qt_start = litmus_clock()
314#define QT_END \
315 sched_trace_log_message("%d P%d [%s@%s:%d]: Took %llu\n\n", \
316 TRACE_ARGS, litmus_clock() - _qt_start)
317
318#define sched_trace_container_param(cid, name) \
319 do { \
320 trace_litmus_container_param(cid, name); \
321 } while (0)
322
323#define sched_trace_server_param(sid, cid, wcet, period) \
324 do { \
325 trace_litmus_server_param(sid, cid, wcet, period); \
326 } while(0)
327
328#define sched_trace_server_switch_to(sid, job, tid) \
329 do { \
330 trace_litmus_server_switch_to(sid, job, tid); \
331 } while(0)
332
333#define sched_trace_server_switch_away(sid, job, tid) \
334 do { \
335 trace_litmus_server_switch_away(sid, job, tid); \
336 } while (0)
337
338#define sched_trace_server_release(sid, job, rel, dead) \
339 do { \
340 trace_litmus_server_release(sid, job, rel, dead); \
341 } while (0)
342
343#define sched_trace_server_completion(sid, job) \
344 do { \
345 trace_litmus_server_completion(sid, job); \
346 } while (0)
347
255#define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ 348#define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */
256 349
257#endif /* __KERNEL__ */ 350#endif /* __KERNEL__ */