[PATCH 7/18] ARM: OMAP: Avoid updating system time for sub-jiffy interrupts

2007-04-09 Thread Tony Lindgren
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 <[EMAIL PROTECTED]>
---
 arch/arm/plat-omap/timer32k.c |   11 +++
 1 files changed, 11 insertions(+), 0 deletions(-)

--- a/arch/arm/plat-omap/timer32k.c
+++ b/arch/arm/plat-omap/timer32k.c
@@ -219,6 +219,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)
 {
+   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);
 }
 
-- 
1.4.4.2

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 7/18] ARM: OMAP: Avoid updating system time for sub-jiffy interrupts

2007-04-09 Thread Tony Lindgren
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 [EMAIL PROTECTED]
---
 arch/arm/plat-omap/timer32k.c |   11 +++
 1 files changed, 11 insertions(+), 0 deletions(-)

--- a/arch/arm/plat-omap/timer32k.c
+++ b/arch/arm/plat-omap/timer32k.c
@@ -219,6 +219,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)
 {
+   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);
 }
 
-- 
1.4.4.2

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/