• Arve Hjønnevåg's avatar
    rtc: Fix some bugs that allowed accumulating time drift in suspend/resume · 6a8943d9
    Arve Hjønnevåg authored
    The current code checks if abs(delta_delta.tv_sec) is greater or
    equal to two before it discards the old delta value, but this can
    trigger at close to -1 seconds since -1.000000001 seconds is stored
    as tv_sec -2 and tv_nsec 999999999 in a normalized timespec.
    
    rtc_resume had an early return check if the rtc value had not changed
    since rtc_suspend. This effectivly stops time for the duration of the
    short sleep. Check if sleep_time is positive after all the adjustments
    have been applied instead since this allows the old_system adjustment
    in rtc_suspend to have an effect even for short sleep cycles.
    
    CC: stable@kernel.org
    Signed-off-by: default avatarArve Hjønnevåg <arve@android.com>
    Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
    6a8943d9
class.c 6.82 KB