Commit ecf3e703 authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

timekeeping: Provide adjtimex() for auxiliary clocks



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: default avatarThomas Gleixner <tglx@linutronix.de>
Acked-by: default avatarJohn Stultz <jstultz@google.com>
Link: https://lore.kernel.org/all/20250625183758.317946543@linutronix.de
parent 4eca49d0
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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)