projects/linux·commit 06c3bc65

sched: Fix update_curr_rt()

06c3bc65 · Peter Zijlstra <[email protected]> · 2011-02-02 13:19:48 +01:00

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 <[email protected]>
Signed-off-by: Peter Zijlstra <[email protected]>
LKML-Reference: <new-submission>
Cc: [email protected] # .37
Signed-off-by: Ingo Molnar <[email protected]>
Commit
06c3bc655697b19521901f9254eb0bbb2c67e7e8
Parents
1e1dbb25

Changes

1 files changed · +1 −1

FileStatusAddDelContent
kernel/sched_rt.cmodified+1−1View file

kernel/sched_rt.c

View file
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c
index c914ec7..ad62677 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;