Commit 8509486a authored by Ingo Molnar's avatar Ingo Molnar

- sync wakeup affinity fix: do not fast-migrate threads

  without making sure that the target CPU is allowed.
parent f042243c
......@@ -361,12 +361,17 @@ static int try_to_wake_up(task_t * p, int sync)
rq = task_rq_lock(p, &flags);
old_state = p->state;
if (!p->array) {
if (unlikely(sync && (rq->curr != p))) {
if (p->thread_info->cpu != smp_processor_id()) {
p->thread_info->cpu = smp_processor_id();
task_rq_unlock(rq, &flags);
goto repeat_lock_task;
}
/*
* Fast-migrate the task if it's not running or runnable
* currently. Do not violate hard affinity.
*/
if (unlikely(sync && (rq->curr != p) &&
(p->thread_info->cpu != smp_processor_id()) &&
(p->cpus_allowed & (1UL << smp_processor_id())))) {
p->thread_info->cpu = smp_processor_id();
task_rq_unlock(rq, &flags);
goto repeat_lock_task;
}
if (old_state == TASK_UNINTERRUPTIBLE)
rq->nr_uninterruptible--;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment