diff options
Diffstat (limited to 'kernel/softirq.c')
-rw-r--r-- | kernel/softirq.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/kernel/softirq.c b/kernel/softirq.c index e7c69a720d69..80d323e6f61a 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c | |||
@@ -269,6 +269,7 @@ void irq_enter(void) | |||
269 | { | 269 | { |
270 | int cpu = smp_processor_id(); | 270 | int cpu = smp_processor_id(); |
271 | 271 | ||
272 | rcu_irq_enter(); | ||
272 | if (idle_cpu(cpu) && !in_interrupt()) { | 273 | if (idle_cpu(cpu) && !in_interrupt()) { |
273 | __irq_enter(); | 274 | __irq_enter(); |
274 | tick_check_idle(cpu); | 275 | tick_check_idle(cpu); |
@@ -295,9 +296,9 @@ void irq_exit(void) | |||
295 | 296 | ||
296 | #ifdef CONFIG_NO_HZ | 297 | #ifdef CONFIG_NO_HZ |
297 | /* Make sure that timer wheel updates are propagated */ | 298 | /* Make sure that timer wheel updates are propagated */ |
298 | if (!in_interrupt() && idle_cpu(smp_processor_id()) && !need_resched()) | ||
299 | tick_nohz_stop_sched_tick(0); | ||
300 | rcu_irq_exit(); | 299 | rcu_irq_exit(); |
300 | if (idle_cpu(smp_processor_id()) && !in_interrupt() && !need_resched()) | ||
301 | tick_nohz_stop_sched_tick(0); | ||
301 | #endif | 302 | #endif |
302 | preempt_enable_no_resched(); | 303 | preempt_enable_no_resched(); |
303 | } | 304 | } |