X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=kernel%2Fsoftirq.c;h=8b75008e2bd84bc91db15681896ab1a631091378;hb=e0f2e3a06be513352cb4955313ed7e55909acd84;hp=918e52df090e88ee0a03096bee651e6c3a4d6dce;hpb=21b4e736922f546e0f1aa7b9d6c442f309a2444a;p=powerpc.git diff --git a/kernel/softirq.c b/kernel/softirq.c index 918e52df09..8b75008e2b 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -17,6 +17,7 @@ #include #include #include +#include #include /* @@ -273,6 +274,18 @@ EXPORT_SYMBOL(do_softirq); #endif +/* + * Enter an interrupt context. + */ +void irq_enter(void) +{ + __irq_enter(); +#ifdef CONFIG_NO_HZ + if (idle_cpu(smp_processor_id())) + tick_nohz_update_jiffies(); +#endif +} + #ifdef __ARCH_IRQ_EXIT_IRQS_DISABLED # define invoke_softirq() __do_softirq() #else @@ -289,6 +302,12 @@ void irq_exit(void) sub_preempt_count(IRQ_EXIT_OFFSET); if (!in_interrupt() && local_softirq_pending()) invoke_softirq(); + +#ifdef CONFIG_NO_HZ + /* Make sure that timer wheel updates are propagated */ + if (!in_interrupt() && idle_cpu(smp_processor_id()) && !need_resched()) + tick_nohz_stop_sched_tick(); +#endif preempt_enable_no_resched(); }