[PATCH] timekeeping: Initialize TAI offset to 37 seconds

From: Miroslav Lichvar

Date: Thu Nov 05 2026 - 09:14:11 EST


With Resolution 5 of the 28th CGPM (continuous UTC becoming effective on
20 May 2027) [1] and no leap second announced for the last possible
date at the end of the year 2026 [2], no more leap seconds or other
leaps in UTC are expected for at least a few hundred years. The TAI-UTC
offset can be assumed now to be constant (37 seconds).

Set the offset in the timekeeping initialization to the expected value
to not require it to be set in user space via ADJ_TAI. It can still be
changed, and leap seconds can still be set, but nothing should be
expected to do that anymore. Existing applications are expected to
either set the offset to the same value, or not touch it at all if they
see it is not zero.

[1] https://www.bipm.org/en/cgpm-2026/resolution-5
[2] https://datacenter.iers.org/data/16/bulletinc-072.txt

Cc: Richard Cochran <richardcochran@xxxxxxxxx>
Cc: David Woodhouse <dwmw2@xxxxxxxxxxxxx>
Signed-off-by: Miroslav Lichvar <mlichvar@xxxxxxxxxx>
---
kernel/time/timekeeping.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index dcf47f1ffdcf..e76e44b194da 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -34,6 +34,8 @@

#define TK_UPDATE_ALL (TK_CLEAR_NTP | TK_CLOCK_WAS_SET)

+#define TK_INITIAL_TAI_OFFSET 37
+
enum timekeeping_adv_mode {
/* Update timekeeper when a tick has passed */
TK_ADV_TICK,
@@ -2091,6 +2093,8 @@ void __init timekeeping_init(void)

tk_set_wall_to_mono(tks, wall_to_mono);

+ __timekeeping_set_tai_offset(tks, TK_INITIAL_TAI_OFFSET);
+
/*
* Use TK_UPDATE_ALL so the NTP layer picks up the clocksource's
* cs_tick_adj via ntp_clear(). Clearing NTP here is otherwise
--
2.56.0