timekeeping: Use inject_offset in warp_clock
authorJohn Stultz <john.stultz@linaro.org>
Fri, 22 Feb 2013 20:33:29 +0000 (12:33 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Fri, 15 Mar 2013 23:50:20 +0000 (16:50 -0700)
When warping the clock (from a local time RTC), use
timekeeping_inject_offset() to atomically add the offset.

This avoids any minor time error caused by the delay between
reading the time, and then setting the adjusted time.

Signed-off-by: John Stultz <john.stultz@linaro.org>
kernel/time.c

index effac571589f6a75661529234815a2c7f167670c..d3617dbd3dca6b3844e0814e889026f01af0ddd4 100644 (file)
@@ -142,9 +142,9 @@ static inline void warp_clock(void)
                struct timespec adjust;
 
                persistent_clock_is_local = 1;
-               adjust = current_kernel_time();
-               adjust.tv_sec += sys_tz.tz_minuteswest * 60;
-               do_settimeofday(&adjust);
+               adjust.tv_sec = sys_tz.tz_minuteswest * 60;
+               adjust.tv_nsec = 0;
+               timekeeping_inject_offset(&adjust);
        }
 }