diff options
| author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2016-02-14 08:56:40 -0500 |
|---|---|---|
| committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2016-03-08 10:12:49 -0500 |
| commit | a83a958e62cb903e14bc458a5ace4b9f380fc802 (patch) | |
| tree | a8a0a2cea9d0cfd31f5f989b92da7202048ad187 /kernel | |
| parent | 5c3fc90c1f92c65f315166f8de9071615c08c088 (diff) | |
LITMUS^RT core: add should_wait_for_stack() callback
Allow plugins to give up when waiting for a stack to become available.
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/litmus.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/kernel/sched/litmus.c b/kernel/sched/litmus.c index 2cdba907f0a8..4fa5a941a284 100644 --- a/kernel/sched/litmus.c +++ b/kernel/sched/litmus.c | |||
| @@ -78,6 +78,19 @@ litmus_schedule(struct rq *rq, struct task_struct *prev) | |||
| 78 | if (next->rt_param.stack_in_use == NO_CPU) | 78 | if (next->rt_param.stack_in_use == NO_CPU) |
| 79 | TRACE_TASK(next,"descheduled. Proceeding.\n"); | 79 | TRACE_TASK(next,"descheduled. Proceeding.\n"); |
| 80 | 80 | ||
| 81 | if (!litmus->should_wait_for_stack(next)) { | ||
| 82 | /* plugin aborted the wait */ | ||
| 83 | TRACE_TASK(next, | ||
| 84 | "plugin gave up waiting for stack\n"); | ||
| 85 | next = NULL; | ||
| 86 | /* Make sure plugin is given a chance to | ||
| 87 | * reconsider. */ | ||
| 88 | litmus_reschedule_local(); | ||
| 89 | /* give up */ | ||
| 90 | raw_spin_lock(&rq->lock); | ||
| 91 | return next; | ||
| 92 | } | ||
| 93 | |||
| 81 | if (lt_before(_maybe_deadlock + 1000000000L, | 94 | if (lt_before(_maybe_deadlock + 1000000000L, |
| 82 | litmus_clock())) { | 95 | litmus_clock())) { |
| 83 | /* We've been spinning for 1s. | 96 | /* We've been spinning for 1s. |
