]> git.baikalelectronics.ru Git - kernel.git/commit
rtc: Fix some bugs that allowed accumulating time drift in suspend/resume
authorArve Hjønnevåg <arve@android.com>
Wed, 23 Nov 2011 02:24:51 +0000 (18:24 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Wed, 23 Nov 2011 03:25:56 +0000 (19:25 -0800)
commita1d7814c9d5041575ef75260004798dc34b954c4
treed14768e0747bd4b44fb00131c9c79713033c51c5
parent5ebb25bb4879afc58eec1a26df01bafa5f9f695c
rtc: Fix some bugs that allowed accumulating time drift in suspend/resume

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: Arve Hjønnevåg <arve@android.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
drivers/rtc/class.c