From: Tony Lindgren Date: Fri, 29 Sep 2006 07:45:10 +0000 (+0300) Subject: ARM: OMAP: Avoid updating system time for sub-jiffy interrupts X-Git-Tag: v2.6.18-omap1~25 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=afdf472d20737f91f098c6bc64f6170e8f739405;p=linux-2.6-omap-h63xx.git ARM: OMAP: Avoid updating system time for sub-jiffy interrupts 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 --- diff --git a/arch/arm/plat-omap/timer32k.c b/arch/arm/plat-omap/timer32k.c index cf6df3378d3..27ee80d3244 100644 --- a/arch/arm/plat-omap/timer32k.c +++ b/arch/arm/plat-omap/timer32k.c @@ -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); }