3889 interval = sd->balance_interval;
3890 if (idle != CPU_IDLE)
3891 interval *= sd->busy_factor;
3892
3893
3894 interval = msecs_to_jiffies(interval);
3895 if (unlikely(!interval))
3896 interval = 1;
3897 if (interval > HZ*NR_CPUS/10)
3898 interval = HZ*NR_CPUS/10;
3899
3900 need_serialize = sd->flags & SD_SERIALIZE;
3901
3902 if (need_serialize) {
3903 if (!spin_trylock(&balancing))
3904 goto out;
3905 }
3906
3907 if (time_after_eq(jiffies, sd->last_balance + interval)) {
3908 if (load_balance(cpu, rq, sd, idle, &balance, &tmp)) {
3909
3910
3911
3912
3913
3914 idle = CPU_NOT_IDLE;
3915 }
3916 sd->last_balance = jiffies;
3917 }
3918 if (need_serialize)
3919 spin_unlock(&balancing);
3920out:
3921 if (time_after(next_balance, sd->last_balance + interval)) {
3922 next_balance = sd->last_balance + interval;
3923 update_next_balance = 1;
3924 }
3925
3926
3927
3928
3929