[RFC] linux-2.4.21-pre1_lost-tick_A0

From: john stultz (johnstul@us.ibm.com)
Date: Mon Dec 16 2002 - 17:09:29 EST


All,
        On the x440, we occasionally (or not so occasionally) get SMIs that
take longer then a few ticks. This can cause brief inconsistencies in
gettimeofday values, as well as clock drift. This patch is my first
patch at compensating for the lost ticks. This applies on top of the
cyclone-timer_B3 patch.

Comments, feedback, and flames requested.

thanks
-john

diff -Nru a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c
--- a/arch/i386/kernel/time.c Mon Dec 16 13:57:55 2002
+++ b/arch/i386/kernel/time.c Mon Dec 16 13:57:55 2002
@@ -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 : Mon Dec 23 2002 - 22:00:14 EST