From: john stultz <johnstul@us.ibm.com>

In developing the ia64-cyclone patch, which implements a cyclone based time
interpolator, I found the following bug which could cause time
inconsistencies.  

In update_wall_time_one_tick(), which is called each timer interrupt, we
call time_interpolator_update(delta_nsec) where delta_nsec is approximately
NSEC_PER_SEC/HZ.  This directly correlates with the changes to xtime which
occurs in update_wall_time_one_tick().

However in update_wall_time(), on a second overflow, we again call
time_interpolator_update(NSEC_PER_SEC).  However while the components of
xtime are being changed, the overall value of xtime does not (nsec is
decremented NSEC_PER_SEC and sec is incremented).  Thus this call to
time_interpolator_update is incorrect.

This patch removes the incorrect call to time_interpolator_update and was
found to resolve the time inconsistencies I had seen while developing the
ia64-cyclone patch.


---

 kernel/timer.c |    1 -
 1 files changed, 1 deletion(-)

diff -puN kernel/timer.c~time-interpolator-fix kernel/timer.c
--- 25/kernel/timer.c~time-interpolator-fix	2004-02-23 12:10:08.000000000 -0800
+++ 25-akpm/kernel/timer.c	2004-02-23 12:10:08.000000000 -0800
@@ -677,7 +677,6 @@ static void update_wall_time(unsigned lo
 	if (xtime.tv_nsec >= 1000000000) {
 	    xtime.tv_nsec -= 1000000000;
 	    xtime.tv_sec++;
-	    time_interpolator_update(NSEC_PER_SEC);
 	    second_overflow();
 	}
 }

_