• John Stultz's avatar
    timekeeping: Add checks to cap clocksource reads to the 'max_cycles' value · a558cd02
    John Stultz authored
    When calculating the current delta since the last tick, we
    currently have no hard protections to prevent a multiplication
    overflow from occuring.
    
    This patch introduces infrastructure to allow a cap that
    limits the clocksource read delta value to the 'max_cycles' value,
    which is where an overflow would occur.
    
    Since this is in the hotpath, it adds the extra checking under
    CONFIG_DEBUG_TIMEKEEPING=y.
    
    There was some concern that capping time like this could cause
    problems as we may stop expiring timers, which could go circular
    if the timer that triggers time accumulation were mis-scheduled
    too far in the future, which would cause time to stop.
    
    However, since the mult overflow would result in a smaller time
    value, we would effectively have the same problem there.
    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-6-git-send-email-john.stultz@linaro.orgSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    a558cd02
timekeeping.c 51.9 KB