[PATCH 7/18] 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 <[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
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/