[patch 24/26] timekeeping: Provide adjtimex() for PTP clocks

Thomas Gleixner posted 26 patches 7 months ago
[patch 24/26] timekeeping: Provide adjtimex() for PTP clocks
Posted by Thomas Gleixner 7 months ago
The behaviour is close to clock_adtime(CLOCK_REALTIME) with the
following differences:

  1) ADJ_SETOFFSET adjusts the PTP 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>
---
 kernel/time/timekeeping.c |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)
---
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -2862,10 +2862,26 @@ static int ptp_clock_set(const clockid_t
 	return 0;
 }
 
+static int ptp_clock_adj(const clockid_t id, struct __kernel_timex *txc)
+{
+	struct tk_data *tkd = ptp_get_tk_data(id);
+	struct adjtimex_result result = { };
+
+	if (!tkd)
+		return -ENODEV;
+
+	/*
+	 * @result is ignored for now as there are neither hrtimers nor a
+	 * RTC related to these PTP clocks.
+	 */
+	return __do_adjtimex(tkd, txc, &result);
+}
+
 const struct k_clock clock_ptp = {
 	.clock_getres		= ptp_get_res,
 	.clock_get_timespec	= ptp_get_timespec,
 	.clock_set		= ptp_clock_set,
+	.clock_adj		= ptp_clock_adj,
 };
 
 static __init void tk_ptp_setup(void)