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; |
