|
@@ -4148,6 +4148,11 @@ static void run_rebalance_domains(struct softirq_action *h)
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline int on_null_domain(int cpu)
|
|
|
|
+{
|
|
|
|
+ return !rcu_dereference(cpu_rq(cpu)->sd);
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing.
|
|
* Trigger the SCHED_SOFTIRQ if it is time to do periodic load balancing.
|
|
*
|
|
*
|
|
@@ -4205,7 +4210,9 @@ static inline void trigger_load_balance(struct rq *rq, int cpu)
|
|
cpumask_test_cpu(cpu, nohz.cpu_mask))
|
|
cpumask_test_cpu(cpu, nohz.cpu_mask))
|
|
return;
|
|
return;
|
|
#endif
|
|
#endif
|
|
- if (time_after_eq(jiffies, rq->next_balance))
|
|
|
|
|
|
+ /* Don't need to rebalance while attached to NULL domain */
|
|
|
|
+ if (time_after_eq(jiffies, rq->next_balance) &&
|
|
|
|
+ likely(!on_null_domain(cpu)))
|
|
raise_softirq(SCHED_SOFTIRQ);
|
|
raise_softirq(SCHED_SOFTIRQ);
|
|
}
|
|
}
|
|
|
|
|