diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-11-10 22:49:40 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-11-10 22:49:39 -0800 |
| commit | befd24230391166ccdf67e0e394e35dd7bf04857 (patch) | |
| tree | 96d5e567d3fafe50d943efb5f5eb184761b82764 /kernel | |
| parent | 2401d64a48302bad3fc74e8ca02edd188d27ae61 (diff) | |
| parent | 45b8775b62bb27f5e88b07c17f45dd9ab0cf9bd9 (diff) | |
Merge "sched/core: Fix migrate tasks bail-out condition"
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/core.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index e7196c3a3457..862eb8fd3860 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -5497,7 +5497,7 @@ static void migrate_tasks(struct rq *dead_rq, bool migrate_pinned_tasks) */ if ((migrate_pinned_tasks && rq->nr_running == 1) || (!migrate_pinned_tasks && - rq->nr_running == num_pinned_kthreads)) + rq->nr_running <= num_pinned_kthreads)) break; /* @@ -5533,8 +5533,12 @@ static void migrate_tasks(struct rq *dead_rq, bool migrate_pinned_tasks) * Since we're inside stop-machine, _nothing_ should have * changed the task, WARN if weird stuff happened, because in * that case the above rq->lock drop is a fail too. + * However, during cpu isolation the load balancer might have + * 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))) { + if (WARN_ON((task_rq(next) != rq || !task_on_rq_queued(next)) && + migrate_pinned_tasks)) { raw_spin_unlock(&next->pi_lock); continue; } |
