summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVikram Mulukutla <markivx@codeaurora.org>2016-11-11 16:05:24 -0800
committerVikram Mulukutla <markivx@codeaurora.org>2016-11-11 16:09:55 -0800
commit3f11a4bc4f4e77c04c0f14aa56c14abfe3dd1743 (patch)
tree0918683f140ac745c951e5795292a7d16cdb63be
parent45b8775b62bb27f5e88b07c17f45dd9ab0cf9bd9 (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.c4
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;
}