From: Joe Korty do_gettimeofday() is using tick_usec which is defined in terms of USER_HZ not HZ. 25-akpm/arch/i386/kernel/time.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff -puN arch/i386/kernel/time.c~do_gettimeofday-tick_usec-fix arch/i386/kernel/time.c --- 25/arch/i386/kernel/time.c~do_gettimeofday-tick_usec-fix Tue Nov 25 11:19:55 2003 +++ 25-akpm/arch/i386/kernel/time.c Tue Nov 25 11:19:55 2003 @@ -95,7 +95,7 @@ void do_gettimeofday(struct timeval *tv) { unsigned long seq; unsigned long usec, sec; - unsigned long max_ntp_tick = tick_usec - tickadj; + unsigned long max_ntp_tick; do { unsigned long lost; @@ -111,13 +111,14 @@ void do_gettimeofday(struct timeval *tv) * Better to lose some accuracy than have time go backwards.. */ if (unlikely(time_adjust < 0)) { + max_ntp_tick = (USEC_PER_SEC / HZ) - tickadj; usec = min(usec, max_ntp_tick); if (lost) usec += lost * max_ntp_tick; } else if (unlikely(lost)) - usec += lost * tick_usec; + usec += lost * (USEC_PER_SEC / HZ); sec = xtime.tv_sec; usec += (xtime.tv_nsec / 1000); _