]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: Avoid updating system time for sub-jiffy interrupts
authorTony Lindgren <tony@atomide.com>
Fri, 29 Sep 2006 07:45:10 +0000 (10:45 +0300)
committerTony Lindgren <tony@atomide.com>
Fri, 29 Sep 2006 07:45:10 +0000 (10:45 +0300)
Updating system time and reprogramming timer can cause latency
issues on busy systems with lots of interrupts with constant
updating of time and reprogramming the system timer.

If a non-timer dyntick interrupt happens within a jiffy from
the last interrupt, updating time and reprogramming the timer
is unnecessary as we will get a timer interrupt soon anyways.

Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/plat-omap/timer32k.c

index cf6df3378d3786d3bcaa2876f770b70db46cc6ca..27ee80d3244de667adf6c8e0bf6bc25d1689234e 100644 (file)
@@ -221,6 +221,17 @@ static inline irqreturn_t _omap_32k_timer_interrupt(int irq, void *dev_id,
 static irqreturn_t omap_32k_timer_handler(int irq, void *dev_id,
                                        struct pt_regs *regs)
 {
+       unsigned long now;
+
+       now = omap_32k_sync_timer_read();
+
+       /* Don't bother reprogramming timer if last tick was before next
+        * jiffie. We will get another interrupt when previously programmed
+        * timer expires. This cuts down interrupt load quite a bit.
+        */
+       if (now - omap_32k_last_tick < OMAP_32K_TICKS_PER_HZ)
+               return IRQ_HANDLED;
+
        return _omap_32k_timer_interrupt(irq, dev_id, regs);
 }