diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2017-06-06 13:21:48 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-06-06 13:21:48 -0700 |
| commit | 6ed51e0bab1ed9a1cb3fc22faef87132242b1649 (patch) | |
| tree | 265df139a98d37af8078c0aa2c5ee4d567f8cb59 /kernel | |
| parent | e227c0d7c3878875684f7d386327645be1387496 (diff) | |
| parent | 64510d4751ba20893eaa181adde328399e19d81d (diff) | |
Merge "sched: Don't active migrate tasks to CPUs in the same cluster"
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/fair.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 4d96380b35e8..9abc3e65dbd9 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -3536,6 +3536,16 @@ kick_active_balance(struct rq *rq, struct task_struct *p, int new_cpu) static DEFINE_RAW_SPINLOCK(migration_lock); +static bool do_migration(int reason, int new_cpu, int cpu) +{ + if ((reason == UP_MIGRATION || reason == DOWN_MIGRATION) + && same_cluster(new_cpu, cpu)) + return false; + + /* Inter cluster high irqload migrations are OK */ + return new_cpu != cpu; +} + /* * Check if currently running task should be migrated to a better cpu. * @@ -3553,7 +3563,7 @@ void check_for_migration(struct rq *rq, struct task_struct *p) raw_spin_lock(&migration_lock); new_cpu = select_best_cpu(p, cpu, reason, 0); - if (new_cpu != cpu) { + if (do_migration(reason, new_cpu, cpu)) { active_balance = kick_active_balance(rq, p, new_cpu); if (active_balance) mark_reserved(new_cpu); |
