diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2016-07-20 11:41:05 -0400 |
---|---|---|
committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2016-07-20 11:46:36 -0400 |
commit | 4c8cb1fa2ee076fc6d2ab8cdfbe8482202bff2e4 (patch) | |
tree | be4d74ac3e16f996ddb94747d7ec5bd97a2d09fa /litmus | |
parent | bbef912ffe78f50d2df598939c0aee2bcfb663d9 (diff) |
LITMUS^RT core: add generic handler for sporadic job arrivals
In particular, check if a job arrival is triggered from a
clock_nanosleep() call.
Diffstat (limited to 'litmus')
-rw-r--r-- | litmus/jobs.c | 21 |
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 | ||
61 | void 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 | |||
61 | long default_wait_for_release_at(lt_t release_time) | 82 | long default_wait_for_release_at(lt_t release_time) |
62 | { | 83 | { |
63 | struct task_struct *t = current; | 84 | struct task_struct *t = current; |