• R
    timekeeping: fix rounding problem during clock update · 5cd1c9c5
    Roman Zippel 提交于
    Due to a rounding problem during a clock update it's possible for readers
    to observe the clock jumping back by 1nsec.  The following simplified
    example demonstrates the problem:
    
    cycle	xtime
    0	0
    1000	999999.6
    2000	1999999.2
    3000	2999998.8
    ...
    
    1500 =	1499999.4
    =	0.0 + 1499999.4
    =	999999.6 + 499999.8
    
    When reading the clock only the full nanosecond part is used, while
    timekeeping internally keeps nanosecond fractions.  If the clock is now
    updated at cycle 1500 here, a nanosecond is missing due to the truncation.
    
    The simple fix is to round up the xtime value during the update, this also
    changes the distance to the reference time, but the adjustment will
    automatically take care that it stays under control.
    Signed-off-by: NRoman Zippel <zippel@linux-m68k.org>
    Signed-off-by: NJohn Stultz <johnstul@us.ibm.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    5cd1c9c5
timekeeping.c 13.5 KB