#include <asm/mach/irq.h>
 
+#if defined(CONFIG_NO_IDLE_HZ)
+# include <asm/dyntick.h>
+# define handle_dynamic_tick(action)                                   \
+       if (!(action->flags & SA_TIMER) && system_timer->dyn_tick) {    \
+               write_seqlock(&xtime_lock);                             \
+               if (system_timer->dyn_tick->state & DYN_TICK_ENABLED)   \
+                       system_timer->dyn_tick->handler(irq, 0, regs);  \
+               write_sequnlock(&xtime_lock);                           \
+       }
+#endif
+
 #endif
 
 /*
  * Kernel time keeping support.
  */
+struct timespec;
 extern int (*set_rtc)(void);
 extern void save_time_delta(struct timespec *delta, struct timespec *rtc);
 extern void restore_time_delta(struct timespec *delta, struct timespec *rtc);
 
 
 #ifdef CONFIG_GENERIC_HARDIRQS
 
+#ifndef handle_dynamic_tick
+# define handle_dynamic_tick(a)                do { } while (0)
+#endif
+
 #ifdef CONFIG_SMP
 static inline void set_native_irq_info(int irq, cpumask_t mask)
 {
 
 #include <linux/interrupt.h>
 #include <linux/kernel_stat.h>
 
-#if defined(CONFIG_NO_IDLE_HZ) && defined(CONFIG_ARM)
-#include <asm/dyntick.h>
-#endif
-
 #include "internals.h"
 
 /**
        irqreturn_t ret, retval = IRQ_NONE;
        unsigned int status = 0;
 
-#if defined(CONFIG_NO_IDLE_HZ) && defined(CONFIG_ARM)
-       if (!(action->flags & SA_TIMER) && system_timer->dyn_tick != NULL) {
-               write_seqlock(&xtime_lock);
-               if (system_timer->dyn_tick->state & DYN_TICK_ENABLED)
-                       system_timer->dyn_tick->handler(irq, 0, regs);
-               write_sequnlock(&xtime_lock);
-       }
-#endif
+       handle_dynamic_tick(action);
 
        if (!(action->flags & IRQF_DISABLED))
                local_irq_enable();