aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2014-09-17 07:16:08 -0400
committerNamhoon Kim <namhoonk@cs.unc.edu>2014-11-03 21:59:59 -0500
commit6d16993db5e56e01d1b19f149ef805ab7aff8e12 (patch)
treea03e84b0106719ed87cb89ae471f731289f23f45
parent301fe33935a9ce53d6f2fc15084c7bcbae163d7a (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.c16
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;