powerpc: Fix problem with time going backwards
authorPaul Mackerras <paulus@samba.org>
Wed, 15 Mar 2006 02:47:15 +0000 (13:47 +1100)
committerPaul Mackerras <paulus@samba.org>
Thu, 16 Mar 2006 05:54:55 +0000 (16:54 +1100)
commit0a45d4491d0f172e02126370f312405c5d473363
treef3f3465d4a24704518e7625334d78add58008b1f
parent82dfdcae0d57c842e02f037758687eef42fb7af6
powerpc: Fix problem with time going backwards

The recent changes to keep gettimeofday in sync with xtime had the side
effect that it was occasionally possible for the time reported by
gettimeofday to go back by a microsecond.  There were two reasons:
(1) when we recalculated the offsets used by gettimeofday every 2^31
timebase ticks, we lost an accumulated fractional microsecond, and
(2) because the update is done some time after the notional start of
jiffy, if ntp is slowing the clock, it is possible to see time go backwards
when the timebase factor gets reduced.

This fixes it by (a) slowing the gettimeofday clock by about 1us in
2^31 timebase ticks (a factor of less than 1 in 3.7 million), and (b)
adjusting the timebase offsets in the rare case that the gettimeofday
result could possibly go backwards (i.e. when ntp is slowing the clock
and the timer interrupt is late).  In this case the adjustment will
reduce to zero eventually because of (a).

Signed-off-by: Paul Mackerras <paulus@samba.org>
arch/powerpc/kernel/time.c