diff options
author | Vikram Mulukutla <markivx@codeaurora.org> | 2016-11-11 16:05:24 -0800 |
---|---|---|
committer | Vikram Mulukutla <markivx@codeaurora.org> | 2016-11-11 16:09:55 -0800 |
commit | 3f11a4bc4f4e77c04c0f14aa56c14abfe3dd1743 (patch) | |
tree | 0918683f140ac745c951e5795292a7d16cdb63be | |
parent | 45b8775b62bb27f5e88b07c17f45dd9ab0cf9bd9 (diff) |
sched: core: Skip migrating tasks that aren't enqueued on dead_rq
During migrate_tasks, we have to drop the dead_rq lock in
order to preserve locking order when acquiring task->pi_lock.
This may allow the task to migrate off of dead_rq. Therefore,
don't attempt to migrate such a task again from dead_rq.
Change-Id: Id31b58e231d3dcd7d32e0dc7f264595d60a7c408
Signed-off-by: Vikram Mulukutla <markivx@codeaurora.org>
-rw-r--r-- | kernel/sched/core.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 862eb8fd3860..84563da000cf 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5537,8 +5537,8 @@ static void migrate_tasks(struct rq *dead_rq, bool migrate_pinned_tasks) * interferred since we don't stop all CPUs. Ignore warning for * this case. */ - if (WARN_ON((task_rq(next) != rq || !task_on_rq_queued(next)) && - migrate_pinned_tasks)) { + if (task_rq(next) != rq || !task_on_rq_queued(next)) { + WARN_ON(migrate_pinned_tasks); raw_spin_unlock(&next->pi_lock); continue; } |