diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2011-02-02 13:19:48 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-02-17 15:14:40 -0800 |
commit | 1cdc65e1400d863f28af868ee1e645485b04f5ed (patch) | |
tree | 35a4af18c9348c748abdea479f488a5d8bb46222 /kernel | |
parent | 44e6ae1221d8cfb07d802c8051424c239a0e2d60 (diff) |
sched: Fix update_curr_rt()
commit 06c3bc655697b19521901f9254eb0bbb2c67e7e8 upstream.
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>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'kernel')
-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 bea7d79f7e9c..c5f1d2370336 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -606,7 +606,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; |