|
|
@@ -9083,22 +9083,26 @@ static inline int on_null_domain(struct rq *rq)
|
|
|
* - 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.
|
|
|
+ * - HK_FLAG_MISC CPUs are used for this task, because HK_FLAG_SCHED not set
|
|
|
+ * anywhere yet.
|
|
|
*/
|
|
|
|
|
|
static inline int find_new_ilb(void)
|
|
|
{
|
|
|
- int ilb = cpumask_first(nohz.idle_cpus_mask);
|
|
|
+ int ilb;
|
|
|
|
|
|
- if (ilb < nr_cpu_ids && idle_cpu(ilb))
|
|
|
- return ilb;
|
|
|
+ for_each_cpu_and(ilb, nohz.idle_cpus_mask,
|
|
|
+ housekeeping_cpumask(HK_FLAG_MISC)) {
|
|
|
+ if (idle_cpu(ilb))
|
|
|
+ return ilb;
|
|
|
+ }
|
|
|
|
|
|
return nr_cpu_ids;
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Kick a CPU to do the nohz balancing, if it is time for it. We pick the
|
|
|
- * nohz_load_balancer CPU (if there is one) otherwise fallback to any idle
|
|
|
- * CPU (if there is one).
|
|
|
+ * Kick a CPU to do the nohz balancing, if it is time for it. We pick any
|
|
|
+ * idle CPU in the HK_FLAG_MISC housekeeping set (if there is one).
|
|
|
*/
|
|
|
static void kick_ilb(unsigned int flags)
|
|
|
{
|