]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
timekeeping: Provide adjtimex() for auxiliary clocks
authorThomas Gleixner <tglx@linutronix.de>
Wed, 25 Jun 2025 18:38:46 +0000 (20:38 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 27 Jun 2025 18:13:13 +0000 (20:13 +0200)
The behaviour is close to clock_adtime(CLOCK_REALTIME) with the
following differences:

  1) ADJ_SETOFFSET adjusts the auxiliary clock offset

  2) ADJ_TAI is not supported

  3) Leap seconds are not supported

  4) PPS is not supported

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: John Stultz <jstultz@google.com>
Link: https://lore.kernel.org/all/20250625183758.317946543@linutronix.de
kernel/time/timekeeping.c

index 6770544f8c0e568c6f0ab904b690616916630044..523670ec0d2ea4347d2e8a9c2a1dcf3efea582b6 100644 (file)
@@ -2875,10 +2875,26 @@ static int aux_clock_set(const clockid_t id, const struct timespec64 *tnew)
        return 0;
 }
 
+static int aux_clock_adj(const clockid_t id, struct __kernel_timex *txc)
+{
+       struct tk_data *aux_tkd = aux_get_tk_data(id);
+       struct adjtimex_result result = { };
+
+       if (!aux_tkd)
+               return -ENODEV;
+
+       /*
+        * @result is ignored for now as there are neither hrtimers nor a
+        * RTC related to auxiliary clocks for now.
+        */
+       return __do_adjtimex(aux_tkd, txc, &result);
+}
+
 const struct k_clock clock_aux = {
        .clock_getres           = aux_get_res,
        .clock_get_timespec     = aux_get_timespec,
        .clock_set              = aux_clock_set,
+       .clock_adj              = aux_clock_adj,
 };
 
 static __init void tk_aux_setup(void)