]> git.baikalelectronics.ru Git - kernel.git/commit
timekeeping/ntp: Determine the multiplier directly from NTP tick length
authorMiroslav Lichvar <mlichvar@redhat.com>
Fri, 9 Mar 2018 18:42:48 +0000 (10:42 -0800)
committerIngo Molnar <mingo@kernel.org>
Sat, 10 Mar 2018 08:12:41 +0000 (09:12 +0100)
commitabee4d2422ddfd0a0a2dad610d347a5ab0dba452
treed4306491e8e4ce50d1fd8decfac0e5c9e14fc8cd
parent4cdf0d10dd1a94999abbac91836d74e3e1419e27
timekeeping/ntp: Determine the multiplier directly from NTP tick length

When the length of the NTP tick changes significantly, e.g. when an
NTP/PTP application is correcting the initial offset of the clock, a
large value may accumulate in the NTP error before the multiplier
converges to the correct value. It may then take a very long time (hours
or even days) before the error is corrected. This causes the clock to
have an unstable frequency offset, which has a negative impact on the
stability of synchronization with precise time sources (e.g. NTP/PTP
using hardware timestamping or the PTP KVM clock).

Use division to determine the correct multiplier directly from the NTP
tick length and replace the iterative approach. This removes the last
major source of the NTP error. The only remaining source is now limited
resolution of the multiplier, which is corrected by adding 1 to the
multiplier when the system clock is behind the NTP time.

Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Richard Cochran <richardcochran@gmail.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1520620971-9567-3-git-send-email-john.stultz@linaro.org
Signed-off-by: Ingo Molnar <mingo@kernel.org>
include/linux/timekeeper_internal.h
kernel/time/timekeeping.c