[PATCH] linux-2.4.21-pre3_lost-tick_A0

From: john stultz (johnstul@us.ibm.com)
Date: Wed Jan 08 2003 - 18:21:54 EST


Marcelo,
        
        Occasionally due to SMIs issued by the service processor, x440s will
lose an interrupt or two. This can cause gettimeofday time
discontinuities as well as clock skew (due to jiffies not being
incremented when needed). This patch uses the cyclone timer to notice
these lost ticks and compensate for them. It only affects systems using
the cyclone timer (x440s only at the moment).

Please apply.

thanks
-john

diff -Nru a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
--- a/arch/i386/kernel/time.c Wed Jan 8 11:37:13 2003
+++ b/arch/i386/kernel/time.c Wed Jan 8 11:37:13 2003
@@ -279,6 +279,7 @@
 static inline void mark_timeoffset_cyclone(void)
 {
         int count;
+ unsigned long delta = last_cyclone_timer;
         spin_lock(&i8253_lock);
         /* quickly read the cyclone timer */
         if(cyclone_timer)
@@ -291,6 +292,13 @@
         count |= inb(0x40) << 8;
         spin_unlock(&i8253_lock);
 
+ /*lost tick compensation*/
+ delta = last_cyclone_timer - delta;
+ if(delta > loops_per_jiffy+2000){
+ delta = (delta/loops_per_jiffy)-1;
+ jiffies += delta;
+ }
+
         count = ((LATCH-1) - count) * TICK_SIZE;
         delay_at_last_interrupt = (count + LATCH/2) / LATCH;
 }

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



This archive was generated by hypermail 2b29 : Wed Jan 15 2003 - 22:00:25 EST