diff options
-rw-r--r-- | kernel/sched/fair.c | 16 |
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; |