|
@@ -7193,12 +7193,17 @@ static void nohz_idle_balance(struct rq *this_rq, enum cpu_idle_type idle)
|
|
|
|
|
|
rq = cpu_rq(balance_cpu);
|
|
|
|
|
|
- raw_spin_lock_irq(&rq->lock);
|
|
|
- update_rq_clock(rq);
|
|
|
- update_idle_cpu_load(rq);
|
|
|
- raw_spin_unlock_irq(&rq->lock);
|
|
|
-
|
|
|
- rebalance_domains(rq, CPU_IDLE);
|
|
|
+ /*
|
|
|
+ * If time for next balance is due,
|
|
|
+ * do the balance.
|
|
|
+ */
|
|
|
+ if (time_after_eq(jiffies, rq->next_balance)) {
|
|
|
+ raw_spin_lock_irq(&rq->lock);
|
|
|
+ update_rq_clock(rq);
|
|
|
+ update_idle_cpu_load(rq);
|
|
|
+ raw_spin_unlock_irq(&rq->lock);
|
|
|
+ rebalance_domains(rq, CPU_IDLE);
|
|
|
+ }
|
|
|
|
|
|
if (time_after(this_rq->next_balance, rq->next_balance))
|
|
|
this_rq->next_balance = rq->next_balance;
|