time, Fix setting of hardware clock in NTP code
authorPrarit Bhargava <prarit@redhat.com>
Fri, 8 Feb 2013 22:59:53 +0000 (17:59 -0500)
committerJohn Stultz <john.stultz@linaro.org>
Fri, 8 Feb 2013 23:07:05 +0000 (15:07 -0800)
commit84e345e4e209cbe796c88fa2ad1732d7121ec100
treef73f35d0e72a6c6f3e4b3ef430608aca3a5e8d54
parent6f16eebe1ff82176339a0439c98ebec9768b0ee2
time, Fix setting of hardware clock in NTP code

At init time, if the system time is "warped" forward in warp_clock()
it will differ from the hardware clock by sys_tz.tz_minuteswest.  This time
difference is not taken into account when ntp updates the hardware clock,
and this causes the system time to jump forward by this offset every reboot.

The kernel must take this offset into account when writing the system time
to the hardware clock in the ntp code.  This patch adds
persistent_clock_is_local which indicates that an offset has been applied
in warp_clock() and accounts for the "warp" before writing the hardware
clock.

x86 does not have this problem as rtc writes are software limited to a
+/-15 minute window relative to the current rtc time.  Other arches, such
as powerpc, however do a full synchronization of the system time to the
rtc and will see this problem.

[v2]: generated against tip/timers/core

Signed-off-by: Prarit Bhargava <prarit@redhat.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: John Stultz <john.stultz@linaro.org>
include/linux/time.h
kernel/time.c
kernel/time/ntp.c