|
@@ -3668,6 +3668,7 @@ static void rebalance_domains(int cpu, enum cpu_idle_type idle)
|
|
|
/* Earliest time when we have to do rebalance again */
|
|
|
unsigned long next_balance = jiffies + 60*HZ;
|
|
|
int update_next_balance = 0;
|
|
|
+ int need_serialize;
|
|
|
cpumask_t tmp;
|
|
|
|
|
|
for_each_domain(cpu, sd) {
|
|
@@ -3685,8 +3686,9 @@ static void rebalance_domains(int cpu, enum cpu_idle_type idle)
|
|
|
if (interval > HZ*NR_CPUS/10)
|
|
|
interval = HZ*NR_CPUS/10;
|
|
|
|
|
|
+ need_serialize = sd->flags & SD_SERIALIZE;
|
|
|
|
|
|
- if (sd->flags & SD_SERIALIZE) {
|
|
|
+ if (need_serialize) {
|
|
|
if (!spin_trylock(&balancing))
|
|
|
goto out;
|
|
|
}
|
|
@@ -3702,7 +3704,7 @@ static void rebalance_domains(int cpu, enum cpu_idle_type idle)
|
|
|
}
|
|
|
sd->last_balance = jiffies;
|
|
|
}
|
|
|
- if (sd->flags & SD_SERIALIZE)
|
|
|
+ if (need_serialize)
|
|
|
spin_unlock(&balancing);
|
|
|
out:
|
|
|
if (time_after(next_balance, sd->last_balance + interval)) {
|