aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern Brandenburg <bbb@mpi-sws.org>2015-08-09 07:18:50 -0400
committerBjoern Brandenburg <bbb@mpi-sws.org>2015-08-09 06:21:19 -0400
commitfec18fc634e6ff5d6bef6cf0b5844fd82483576d (patch)
tree75cad7d1cf3a3cfec288dac4950538ec0c9e8005
parent0db6e11e49f7bc4893ffff4d8a7af1235894d986 (diff)
Call sched_state_task_picked() from pick_next_task_stop()
Otherwise, the scheduler state machine becomes confused (and goes into a rescheduling loop) when stop-machine is triggered.
-rw-r--r--kernel/sched/stop_task.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/kernel/sched/stop_task.c b/kernel/sched/stop_task.c
index 79ffec45a6ac..4b3fe4333268 100644
--- a/kernel/sched/stop_task.c
+++ b/kernel/sched/stop_task.c
@@ -1,5 +1,7 @@
1#include "sched.h" 1#include "sched.h"
2 2
3#include <litmus/preempt.h>
4
3/* 5/*
4 * stop-task scheduling class. 6 * stop-task scheduling class.
5 * 7 *
@@ -35,6 +37,13 @@ pick_next_task_stop(struct rq *rq, struct task_struct *prev)
35 37
36 stop->se.exec_start = rq_clock_task(rq); 38 stop->se.exec_start = rq_clock_task(rq);
37 39
40 /* Let the LITMUS^RT scheduler state machine know
41 * that a task was picked. This is needed because the
42 * LITMUS^RT scheduling plugin will not be called
43 * if the stop-task class picks a task.
44 */
45 sched_state_task_picked();
46
38 return stop; 47 return stop;
39} 48}
40 49