|
@@ -7753,14 +7753,16 @@ static void run_rebalance_domains(struct softirq_action *h)
|
|
|
enum cpu_idle_type idle = this_rq->idle_balance ?
|
|
enum cpu_idle_type idle = this_rq->idle_balance ?
|
|
|
CPU_IDLE : CPU_NOT_IDLE;
|
|
CPU_IDLE : CPU_NOT_IDLE;
|
|
|
|
|
|
|
|
- rebalance_domains(this_rq, idle);
|
|
|
|
|
-
|
|
|
|
|
/*
|
|
/*
|
|
|
* If this cpu has a pending nohz_balance_kick, then do the
|
|
* If this cpu has a pending nohz_balance_kick, then do the
|
|
|
* balancing on behalf of the other idle cpus whose ticks are
|
|
* balancing on behalf of the other idle cpus whose ticks are
|
|
|
- * stopped.
|
|
|
|
|
|
|
+ * stopped. Do nohz_idle_balance *before* rebalance_domains to
|
|
|
|
|
+ * give the idle cpus a chance to load balance. Else we may
|
|
|
|
|
+ * load balance only within the local sched_domain hierarchy
|
|
|
|
|
+ * and abort nohz_idle_balance altogether if we pull some load.
|
|
|
*/
|
|
*/
|
|
|
nohz_idle_balance(this_rq, idle);
|
|
nohz_idle_balance(this_rq, idle);
|
|
|
|
|
+ rebalance_domains(this_rq, idle);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
/*
|