Messages in this thread Patch in this message |  | | | Date | Wed, 9 Sep 2009 15:35:43 +0800 | | Subject | [PATCH] update clocksource raw_time in timekeeping_suspend | | From | ye janboe <> |
| |
after resume from suspend, raw_time is not updated in timekeeping_suspend. CLOCK_MONOTONIC_RAW could not get the real hw time. This patch fix this issue.
Signed-off-by: janboe <janboe.ye@gmail.com> --- kernel/time/timekeeping.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index e8c77d9..8420b85 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -331,6 +331,8 @@ static unsigned long timekeeping_suspend_time; static int timekeeping_resume(struct sys_device *dev) { unsigned long flags; + s64 nsec; + cycle_t last_cycle, cycle_delta; unsigned long now = read_persistent_clock();
clocksource_resume(); @@ -346,8 +348,12 @@ static int timekeeping_resume(struct sys_device *dev) } update_xtime_cache(0); /* re-base the last cycle value */ + last_cycle = clock->cycle_last; clock->cycle_last = 0; clock->cycle_last = clocksource_read(clock); + cycle_delta = clock->cycle_last - last_cycle; + nsec = cyc2ns(clock, cycle_delta); + timespec_add_ns(&clock->raw_time, nsec); clock->error = 0; timekeeping_suspended = 0; write_sequnlock_irqrestore(&xtime_lock, flags);
|  |