• John Stultz's avatar
    timekeeping: Try to catch clocksource delta underflows · 057b87e3
    John Stultz authored
    In the case where there is a broken clocksource
    where there are multiple actual clocks that
    aren't perfectly aligned, we may see small "negative"
    deltas when we subtract 'now' from 'cycle_last'.
    
    The values are actually negative with respect to the
    clocksource mask value, not necessarily negative
    if cast to a s64, but we can check by checking the
    delta to see if it is a small (relative to the mask)
    negative value (again negative relative to the mask).
    
    If so, we assume we jumped backwards somehow and
    instead use zero for our delta.
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    Cc: Dave Jones <davej@codemonkey.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Prarit Bhargava <prarit@redhat.com>
    Cc: Richard Cochran <richardcochran@gmail.com>
    Cc: Stephen Boyd <sboyd@codeaurora.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1426133800-29329-7-git-send-email-john.stultz@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    057b87e3
timekeeping.c 52.1 KB