diff options
Diffstat (limited to 'include/litmus/sched_trace.h')
-rw-r--r-- | include/litmus/sched_trace.h | 103 |
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 | ||
83 | struct st_task_exit_data { | ||
84 | u64 avg_exec_time; | ||
85 | u64 max_exec_time; | ||
86 | }; | ||
87 | |||
88 | struct 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 | ||
85 | typedef enum { | 96 | typedef 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 | ||
100 | struct st_event_record { | 113 | struct 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); |
155 | feather_callback void do_sched_trace_sys_release(unsigned long id, | 170 | feather_callback void do_sched_trace_sys_release(unsigned long id, |
156 | lt_t* start); | 171 | lt_t* start); |
172 | feather_callback void do_sched_trace_task_exit(unsigned long id, | ||
173 | struct task_struct* task); | ||
174 | feather_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__ */ |