Messages in this thread | | | Date | Tue, 1 Dec 2020 12:12:24 -0400 | From | Jason Gunthorpe <> | Subject | Re: [PATCH] rtc: adapt allowed RTC update error |
| |
On Tue, Dec 01, 2020 at 03:38:35PM +0100, Miroslav Lichvar wrote: > When the system clock is marked as synchronized via adjtimex(), the > kernel is expected to copy the system time to the RTC every 11 minutes. > > There are reports that it doesn't always work reliably. It seems the > current requirement for the RTC update to happen within 5 ticks of the > target time in some cases can consistently fail for hours or even days. > > It is better to set the RTC with a larger error than let it drift for > too long. > > Add a static variable to rtc_tv_nsec_ok() to count the checks. With each > failed check, relax the requirement by one jiffie, and reset the counter > when it finally succeeds. This should allow the RTC update to happen in > a minute at most. > > Signed-off-by: Miroslav Lichvar <mlichvar@redhat.com> > Cc: Thomas Gleixner <tglx@linutronix.de> > Cc: John Stultz <john.stultz@linaro.org> > Cc: Prarit Bhargava <prarit@redhat.com> > Cc: Jason Gunthorpe <jgg@ziepe.ca> > include/linux/rtc.h | 17 +++++++++++++---- > 1 file changed, 13 insertions(+), 4 deletions(-) > > diff --git a/include/linux/rtc.h b/include/linux/rtc.h > index 22d1575e4991..8d105f10ef6a 100644 > +++ b/include/linux/rtc.h > @@ -218,21 +218,30 @@ static inline bool rtc_tv_nsec_ok(s64 set_offset_nsec, > struct timespec64 *to_set, > const struct timespec64 *now) > { > - /* Allowed error in tv_nsec, arbitarily set to 5 jiffies in ns. */ > - const unsigned long TIME_SET_NSEC_FUZZ = TICK_NSEC * 5; > struct timespec64 delay = {.tv_sec = 0, > .tv_nsec = set_offset_nsec}; > + unsigned long time_set_nsec_fuzz; > + static unsigned int attempt;
Adding a static value instide a static inline should not be done
I'm not sure using a static like this is the best idea anyhow, if you want something like this it should be per-rtc, not global
Did you look at why time has become so in-accurate in your system? 5 jiffies is usually a pretty long time?
Jason
| |