public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ntp: Make sure RTC is synchronized when time goes backwards
@ 2024-09-07 19:09 Benjamin ROBIN
  2024-09-07 21:42 ` Thomas Gleixner
                   ` (3 more replies)
  0 siblings, 4 replies; 8+ messages in thread
From: Benjamin ROBIN @ 2024-09-07 19:09 UTC (permalink / raw)
  To: jstultz, tglx; +Cc: sboyd, linux-kernel, Benjamin ROBIN

The "sync_hw_clock" is normally called every 11 minutes when time is
synchronized. This issue is that this periodic timer uses the REALTIME
clock, so when time moves backwards (the NTP server jumps into the past),
the next call to "sync_hw_clock" could be realized after a very long
period.

A normal NTP server should not jump in the past like that, but it is
possible... Another way to reproduce this issue is using phc2sys to
synchronize the REALTIME clock with for example an IRIG timecode with
the source always starting at the same date (not synchronized).

This patch cancels the periodic timer on a time jump (ADJ_SETOFFSET).
The timer will be relaunched at the end of "do_adjtimex" if NTP is still
considered synced. Otherwise the timer will be relaunched later when NTP
is synced. This way, when the time is synchronized again, the RTC is
updated after less than 2 seconds.

Signed-off-by: Benjamin ROBIN <dev@benjarobin.fr>
---
 kernel/time/ntp.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index 8d2dd214ec68..5c8dd92cf012 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -751,6 +751,9 @@ static inline void process_adjtimex_modes(const struct __kernel_timex *txc,
 
 	if (txc->modes & (ADJ_TICK|ADJ_FREQUENCY|ADJ_OFFSET))
 		ntp_update_frequency();
+
+	if (txc->modes & ADJ_SETOFFSET)
+		hrtimer_cancel(&sync_hrtimer);
 }
 
 
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2024-09-10 11:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-07 19:09 [PATCH] ntp: Make sure RTC is synchronized when time goes backwards Benjamin ROBIN
2024-09-07 21:42 ` Thomas Gleixner
2024-09-08 11:45   ` Benjamin ROBIN
2024-09-08 11:45   ` [PATCH v2] " Benjamin ROBIN
2024-09-08 12:39 ` [PATCH] " kernel test robot
2024-09-08 12:39 ` kernel test robot
2024-09-08 14:08 ` [PATCH v3] " Benjamin ROBIN
2024-09-10 11:59   ` [tip: timers/core] " tip-bot2 for Benjamin ROBIN

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox