diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2011-02-02 13:19:48 +0100 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-02-03 12:21:33 +0100 |
commit | 06c3bc655697b19521901f9254eb0bbb2c67e7e8 (patch) | |
tree | f712a3359f9a3a73652bb3316e0281f26f48c1ab | |
parent | 1e1dbb259c79b38a542c1c4c00fd8dfe936b183b (diff) | |
download | linux-06c3bc655697b19521901f9254eb0bbb2c67e7e8.tar.gz linux-06c3bc655697b19521901f9254eb0bbb2c67e7e8.tar.bz2 linux-06c3bc655697b19521901f9254eb0bbb2c67e7e8.zip |
sched: Fix update_curr_rt()
cpu_stopper_thread()
migration_cpu_stop()
__migrate_task()
deactivate_task()
dequeue_task()
dequeue_task_rq()
update_curr_rt()
Will call update_curr_rt() on rq->curr, which at that time is
rq->stop. The problem is that rq->stop.prio matches an RT prio and
thus falsely assumes its a rt_sched_class task.
Reported-Debuged-Tested-Acked-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Cc: stable@kernel.org # .37
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched_rt.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index c914ec747ca6..ad6267714c84 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -625,7 +625,7 @@ static void update_curr_rt(struct rq *rq) struct rt_rq *rt_rq = rt_rq_of_se(rt_se); u64 delta_exec; - if (!task_has_rt_policy(curr)) + if (curr->sched_class != &rt_sched_class) return; delta_exec = rq->clock_task - curr->se.exec_start; |