diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2014-09-17 07:16:08 -0400 |
---|---|---|
committer | Namhoon Kim <namhoonk@cs.unc.edu> | 2014-11-03 21:59:59 -0500 |
commit | 6d16993db5e56e01d1b19f149ef805ab7aff8e12 (patch) | |
tree | a03e84b0106719ed87cb89ae471f731289f23f45 | |
parent | 301fe33935a9ce53d6f2fc15084c7bcbae163d7a (diff) |
P-RES: improved handling of tardy jobs
Don't set a release timer for jobs that are tardy and already
released.
-rw-r--r-- | litmus/sched_pres.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/litmus/sched_pres.c b/litmus/sched_pres.c index 34b096dece90..e2d48101c890 100644 --- a/litmus/sched_pres.c +++ b/litmus/sched_pres.c | |||
@@ -251,13 +251,23 @@ static long pres_complete_job(void) | |||
251 | ktime_t next_release; | 251 | ktime_t next_release; |
252 | long err; | 252 | long err; |
253 | 253 | ||
254 | TRACE_CUR("pres_complete_job at %llu\n", litmus_clock()); | 254 | TRACE_CUR("pres_complete_job at %llu (deadline: %llu)\n", litmus_clock(), |
255 | get_deadline(current)); | ||
255 | 256 | ||
256 | tsk_rt(current)->completed = 1; | 257 | tsk_rt(current)->completed = 1; |
257 | prepare_for_next_period(current); | 258 | prepare_for_next_period(current); |
258 | next_release = ns_to_ktime(get_release(current)); | 259 | next_release = ns_to_ktime(get_release(current)); |
259 | set_current_state(TASK_INTERRUPTIBLE); | 260 | preempt_disable(); |
260 | err = schedule_hrtimeout(&next_release, HRTIMER_MODE_ABS); | 261 | TRACE_CUR("next_release=%llu\n", get_release(current)); |
262 | if (get_release(current) > litmus_clock()) { | ||
263 | set_current_state(TASK_INTERRUPTIBLE); | ||
264 | preempt_enable_no_resched(); | ||
265 | err = schedule_hrtimeout(&next_release, HRTIMER_MODE_ABS); | ||
266 | } else { | ||
267 | err = 0; | ||
268 | TRACE_CUR("TARDY: release=%llu now=%llu\n", get_release(current), litmus_clock()); | ||
269 | preempt_enable(); | ||
270 | } | ||
261 | 271 | ||
262 | TRACE_CUR("pres_complete_job returns at %llu\n", litmus_clock()); | 272 | TRACE_CUR("pres_complete_job returns at %llu\n", litmus_clock()); |
263 | return err; | 273 | return err; |