|
@@ -249,18 +249,19 @@ static inline void stop_hz_timer(void)
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
unsigned long seq, next;
|
|
unsigned long seq, next;
|
|
__u64 timer, todval;
|
|
__u64 timer, todval;
|
|
|
|
+ int cpu = smp_processor_id();
|
|
|
|
|
|
if (sysctl_hz_timer != 0)
|
|
if (sysctl_hz_timer != 0)
|
|
return;
|
|
return;
|
|
|
|
|
|
- cpu_set(smp_processor_id(), nohz_cpu_mask);
|
|
|
|
|
|
+ cpu_set(cpu, nohz_cpu_mask);
|
|
|
|
|
|
/*
|
|
/*
|
|
* Leave the clock comparator set up for the next timer
|
|
* Leave the clock comparator set up for the next timer
|
|
* tick if either rcu or a softirq is pending.
|
|
* tick if either rcu or a softirq is pending.
|
|
*/
|
|
*/
|
|
- if (rcu_pending(smp_processor_id()) || local_softirq_pending()) {
|
|
|
|
- cpu_clear(smp_processor_id(), nohz_cpu_mask);
|
|
|
|
|
|
+ if (rcu_needs_cpu(cpu) || local_softirq_pending()) {
|
|
|
|
+ cpu_clear(cpu, nohz_cpu_mask);
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|