Since cpu which is put into quiescent mode, would remove itself from kernel's sched_domain. So we could use search sched_domain method to check whether this cpu don't want to be disturbed as idle load balance would send IPI to it.
Signed-off-by: Lei Wen <lei...@marvell.com> --- kernel/sched/fair.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 235cfa7..14230ae 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -6783,6 +6783,8 @@ out_unlock: * - When one of the busy CPUs notice that there may be an idle rebalancing * needed, they will kick the idle load balancer, which then does idle * load balancing for all the idle CPUs. + * - exclude those cpus not inside current call_cpu's sched_domain, so that + * those isolated cpu could be kept in their quisecnt mode. */ static struct { cpumask_var_t idle_cpus_mask; @@ -6792,10 +6794,16 @@ static struct { static inline int find_new_ilb(void) { - int ilb = cpumask_first(nohz.idle_cpus_mask); + int ilb; + int cpu = smp_processor_id(); + struct sched_domain *tmp; - if (ilb < nr_cpu_ids && idle_cpu(ilb)) - return ilb; + for_each_domain(cpu, tmp) { + ilb = cpumask_first_and(nohz.idle_cpus_mask, + sched_domain_span(tmp)); + if (ilb < nr_cpu_ids && idle_cpu(ilb)) + return ilb; + } return nr_cpu_ids; } -- 1.8.3.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/