Load balancer shouldn't spread CFS tasks into a CPU marked as Avoid. Remove those CPUs from load balancing decisions.
At wakeup, don't select a CPU marked as avoid. Signed-off-by: Shrikanth Hegde <sshe...@linux.ibm.com> --- while tesing didn't see cpu being marked as avoid while new_cpu is. May need some more probing to see if even cpu can be. if so it could lead to crash. kernel/sched/fair.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 7e2963efe800..406288aef535 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8546,7 +8546,12 @@ select_task_rq_fair(struct task_struct *p, int prev_cpu, int wake_flags) } rcu_read_unlock(); - return new_cpu; + /* Don't select a CPU marked as avoid for wakeup */ + if (cpu_avoid(new_cpu)) + return cpu; + else + return new_cpu; + } /* @@ -11662,6 +11667,9 @@ static int sched_balance_rq(int this_cpu, struct rq *this_rq, cpumask_and(cpus, sched_domain_span(sd), cpu_active_mask); + /* Don't spread load into CPUs marked as avoid */ + cpumask_andnot(cpus, cpus, cpu_avoid_mask); + schedstat_inc(sd->lb_count[idle]); redo: -- 2.43.0