| From a97ad0c4b447a132a322cedc3a5f7fa4cab4b304 Mon Sep 17 00:00:00 2001 |
| From: Miroslav Lichvar <mlichvar@redhat.com> |
| Date: Thu, 1 Aug 2013 19:31:35 +0200 |
| Subject: ntp: Make periodic RTC update more reliable |
| |
| From: Miroslav Lichvar <mlichvar@redhat.com> |
| |
| commit a97ad0c4b447a132a322cedc3a5f7fa4cab4b304 upstream. |
| |
| The current code requires that the scheduled update of the RTC happens |
| in the closest tick to the half of the second. This seems to be |
| difficult to achieve reliably. The scheduled work may be missing the |
| target time by a tick or two and be constantly rescheduled every second. |
| |
| Relax the limit to 10 ticks. As a typical RTC drifts in the 11-minute |
| update interval by several milliseconds, this shouldn't affect the |
| overall accuracy of the RTC much. |
| |
| Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com> |
| Signed-off-by: John Stultz <john.stultz@linaro.org> |
| Cc: Josh Boyer <jwboyer@fedoraproject.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/time/ntp.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/time/ntp.c |
| +++ b/kernel/time/ntp.c |
| @@ -475,6 +475,7 @@ static void sync_cmos_clock(struct work_ |
| * called as close as possible to 500 ms before the new second starts. |
| * This code is run on a timer. If the clock is set, that timer |
| * may not expire at the correct time. Thus, we adjust... |
| + * We want the clock to be within a couple of ticks from the target. |
| */ |
| if (!ntp_synced()) { |
| /* |
| @@ -485,7 +486,7 @@ static void sync_cmos_clock(struct work_ |
| } |
| |
| getnstimeofday(&now); |
| - if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec / 2) { |
| + if (abs(now.tv_nsec - (NSEC_PER_SEC / 2)) <= tick_nsec * 5) { |
| struct timespec adjust = now; |
| |
| fail = -ENODEV; |