From 827a31c699abf2346b472da214280c983783f34b Mon Sep 17 00:00:00 2001 From: Pavankumar Kondeti Date: Mon, 23 Jan 2017 06:39:12 +0530 Subject: sched: set LBF_IGNORE_PREFERRED_CLUSTER_TASKS correctly The LBF_IGNORE_PREFERRED_CLUSTER_TASKS flag needs to be set for all types of inter-cluster load balance. Currently this is set only when higher capacity CPU is pulling the tasks from a lower capacity CPU. This can result in the migration of grouped tasks from higher capacity cluster to lower capacity cluster. Change-Id: Ib0476c5c85781804798ef49268e1b193859ff5ef Signed-off-by: Pavankumar Kondeti --- kernel/sched/fair.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'kernel') diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index c52655581c4c..ac4c3f1d144a 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7940,10 +7940,11 @@ static int detach_tasks(struct lb_env *env) if (env->imbalance <= 0) return 0; + if (!same_cluster(env->dst_cpu, env->src_cpu)) + env->flags |= LBF_IGNORE_PREFERRED_CLUSTER_TASKS; + if (cpu_capacity(env->dst_cpu) < cpu_capacity(env->src_cpu)) env->flags |= LBF_IGNORE_BIG_TASKS; - else if (!same_cluster(env->dst_cpu, env->src_cpu)) - env->flags |= LBF_IGNORE_PREFERRED_CLUSTER_TASKS; redo: while (!list_empty(tasks)) { -- cgit v1.2.3