aboutsummaryrefslogtreecommitdiffstats
path: root/litmus
diff options
context:
space:
mode:
Diffstat (limited to 'litmus')
-rw-r--r--litmus/jobs.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/litmus/jobs.c b/litmus/jobs.c
index 250ee8dfd68b..1c700f9acd24 100644
--- a/litmus/jobs.c
+++ b/litmus/jobs.c
@@ -58,6 +58,27 @@ void release_at(struct task_struct *t, lt_t start)
58 tsk_rt(t)->completed = 0; 58 tsk_rt(t)->completed = 0;
59} 59}
60 60
61void inferred_sporadic_job_release_at(struct task_struct *t, lt_t when)
62{
63 /* new sporadic release */
64 sched_trace_last_suspension_as_completion(t);
65 /* check if this task is resuming from a clock_nanosleep() call */
66 if (tsk_rt(t)->doing_abs_nanosleep &&
67 lt_after_eq(tsk_rt(t)->nanosleep_wakeup,
68 get_release(t) + get_rt_period(t))) {
69 /* clock_nanosleep() is supposed to wake up the task
70 * at a time that is a valid release time. Use that time
71 * rather than guessing the intended release time from the
72 * current time. */
73 TRACE_TASK(t, "nanosleep: backdating release "
74 "to %llu instead of %llu\n",
75 tsk_rt(t)->nanosleep_wakeup, when);
76 when = tsk_rt(t)->nanosleep_wakeup;
77 }
78 release_at(t, when);
79 sched_trace_task_release(t);
80}
81
61long default_wait_for_release_at(lt_t release_time) 82long default_wait_for_release_at(lt_t release_time)
62{ 83{
63 struct task_struct *t = current; 84 struct task_struct *t = current;