aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kernel/sched/fair.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index dfa92b7b3dec..b8ef321641df 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -3896,10 +3896,14 @@ int can_migrate_task(struct task_struct *p, struct lb_env *env)
3896 int tsk_cache_hot = 0; 3896 int tsk_cache_hot = 0;
3897 /* 3897 /*
3898 * We do not migrate tasks that are: 3898 * We do not migrate tasks that are:
3899 * 1) running (obviously), or 3899 * 1) throttled_lb_pair, or
3900 * 2) cannot be migrated to this CPU due to cpus_allowed, or 3900 * 2) cannot be migrated to this CPU due to cpus_allowed, or
3901 * 3) are cache-hot on their current CPU. 3901 * 3) running (obviously), or
3902 * 4) are cache-hot on their current CPU.
3902 */ 3903 */
3904 if (throttled_lb_pair(task_group(p), env->src_cpu, env->dst_cpu))
3905 return 0;
3906
3903 if (!cpumask_test_cpu(env->dst_cpu, tsk_cpus_allowed(p))) { 3907 if (!cpumask_test_cpu(env->dst_cpu, tsk_cpus_allowed(p))) {
3904 int new_dst_cpu; 3908 int new_dst_cpu;
3905 3909
@@ -3967,9 +3971,6 @@ static int move_one_task(struct lb_env *env)
3967 struct task_struct *p, *n; 3971 struct task_struct *p, *n;
3968 3972
3969 list_for_each_entry_safe(p, n, &env->src_rq->cfs_tasks, se.group_node) { 3973 list_for_each_entry_safe(p, n, &env->src_rq->cfs_tasks, se.group_node) {
3970 if (throttled_lb_pair(task_group(p), env->src_rq->cpu, env->dst_cpu))
3971 continue;
3972
3973 if (!can_migrate_task(p, env)) 3974 if (!can_migrate_task(p, env))
3974 continue; 3975 continue;
3975 3976
@@ -4021,7 +4022,7 @@ static int move_tasks(struct lb_env *env)
4021 break; 4022 break;
4022 } 4023 }
4023 4024
4024 if (throttled_lb_pair(task_group(p), env->src_cpu, env->dst_cpu)) 4025 if (!can_migrate_task(p, env))
4025 goto next; 4026 goto next;
4026 4027
4027 load = task_h_load(p); 4028 load = task_h_load(p);
@@ -4032,9 +4033,6 @@ static int move_tasks(struct lb_env *env)
4032 if ((load / 2) > env->imbalance) 4033 if ((load / 2) > env->imbalance)
4033 goto next; 4034 goto next;
4034 4035
4035 if (!can_migrate_task(p, env))
4036 goto next;
4037
4038 move_task(p, env); 4036 move_task(p, env);
4039 pulled++; 4037 pulled++;
4040 env->imbalance -= load; 4038 env->imbalance -= load;