mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "tip-bot2 for Thomas Gleixner" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Thomas Gleixner <tglx@kernel.org>,
	David Woodhouse <dwmw@amazon.co.uk>,
	Arthur Kiyanovski <akiyano@amazon.com>,
	Jacob Keller <jacob.e.keller@intel.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: timers/ptp] timekeeping: Add system_counterval_t to struct system_device_crosststamp
Date: Thu, 04 Jun 2026 09:07:55 -0000	[thread overview]
Message-ID: <178056407541.710.2222085624536059784.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20260529195557.429406675@kernel.org>

The following commit has been merged into the timers/ptp branch of tip:

Commit-ID:     6c14771816435a7ecf52d981a341e2de21463268
Gitweb:        https://git.kernel.org/tip/6c14771816435a7ecf52d981a341e2de21463268
Author:        Thomas Gleixner <tglx@kernel.org>
AuthorDate:    Fri, 29 May 2026 22:00:28 +02:00
Committer:     Thomas Gleixner <tglx@kernel.org>
CommitterDate: Thu, 04 Jun 2026 11:04:16 +02:00

timekeeping: Add system_counterval_t to struct system_device_crosststamp

An upcoming extension to the PTP IOCTL requires to return the system counter
value and the clocksource ID to user space. get_device_system_crosststamp() has
this information already.

Extend struct system_device_crosststamp with a system_counterval_t member
and fill in the data.

Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Tested-by: David Woodhouse <dwmw@amazon.co.uk>
Tested-by: Arthur Kiyanovski <akiyano@amazon.com>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Link: https://patch.msgid.link/20260529195557.429406675@kernel.org
---
 include/linux/timekeeping.h | 28 +++++++++++-----------
 kernel/time/timekeeping.c   | 46 ++++++++++++++++--------------------
 2 files changed, 36 insertions(+), 38 deletions(-)

diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index eb64c90..3867db6 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -297,19 +297,6 @@ struct system_time_snapshot {
 };
 
 /**
- * struct system_device_crosststamp - system/device cross-timestamp
- *				      (synchronized capture)
- * @device:		Device time
- * @sys_realtime:	Realtime simultaneous with device time
- * @sys_monoraw:	Monotonic raw simultaneous with device time
- */
-struct system_device_crosststamp {
-	ktime_t device;
-	ktime_t sys_realtime;
-	ktime_t sys_monoraw;
-};
-
-/**
  * struct system_counterval_t - system counter value with the ID of the
  *				corresponding clocksource
  * @cycles:	System counter value
@@ -325,6 +312,21 @@ struct system_counterval_t {
 	bool			use_nsecs;
 };
 
+/**
+ * struct system_device_crosststamp - system/device cross-timestamp
+ *				      (synchronized capture)
+ * @device:		Device time
+ * @sys_counter:	Clocksource counter value simultaneous with device time
+ * @sys_realtime:	Realtime simultaneous with device time
+ * @sys_monoraw:	Monotonic raw simultaneous with device time
+ */
+struct system_device_crosststamp {
+	ktime_t				device;
+	struct system_counterval_t	sys_counter;
+	ktime_t				sys_realtime;
+	ktime_t				sys_monoraw;
+};
+
 extern bool ktime_real_to_base_clock(ktime_t treal,
 				     enum clocksource_ids base_id, u64 *cycles);
 extern bool timekeeping_clocksource_has_base(enum clocksource_ids id);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index e43aa11..372179f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1418,6 +1418,8 @@ static bool convert_base_to_cs(struct system_counterval_t *scv)
 		return false;
 
 	scv->cycles += base->offset;
+	/* Set the clocksource ID as scv::cycles is now clocksource based */
+	scv->cs_id = cs->id;
 	return true;
 }
 
@@ -1485,11 +1487,11 @@ EXPORT_SYMBOL_GPL(ktime_real_to_base_clock);
 
 /**
  * get_device_system_crosststamp - Synchronously capture system/device timestamp
- * @get_time_fn:	Callback to get simultaneous device time and
- *	system counter from the device driver
+ * @get_time_fn:	Callback to get simultaneous device time and system counter
+ *			from the device driver
  * @ctx:		Context passed to get_time_fn()
- * @history_begin:	Historical reference point used to interpolate system
- *	time when counter provided by the driver is before the current interval
+ * @history_begin:	Historical reference point used to interpolate system time when
+ *			the counter value provided by the driver is before the current interval
  * @xtstamp:		Receives simultaneously captured system and device time
  *
  * Reads a timestamp from a device and correlates it to system time
@@ -1502,14 +1504,12 @@ int get_device_system_crosststamp(int (*get_time_fn)
 				  struct system_time_snapshot *history_begin,
 				  struct system_device_crosststamp *xtstamp)
 {
-	struct system_counterval_t system_counterval = {};
+	u64 syscnt_cycles, cycles, now, interval_start;
 	struct timekeeper *tk = &tk_core.timekeeper;
-	u64 cycles, now, interval_start;
-	unsigned int clock_was_set_seq = 0;
+	unsigned int seq, clock_was_set_seq = 0;
 	ktime_t base_real, base_raw;
 	u64 nsec_real, nsec_raw;
 	u8 cs_was_changed_seq;
-	unsigned int seq;
 	bool do_interp;
 	int ret;
 
@@ -1519,19 +1519,20 @@ int get_device_system_crosststamp(int (*get_time_fn)
 		 * Try to synchronously capture device time and a system
 		 * counter value calling back into the device driver
 		 */
-		ret = get_time_fn(&xtstamp->device, &system_counterval, ctx);
+		ret = get_time_fn(&xtstamp->device, &xtstamp->sys_counter, ctx);
 		if (ret)
 			return ret;
 
 		/*
 		 * Verify that the clocksource ID associated with the captured
 		 * system counter value is the same as for the currently
-		 * installed timekeeper clocksource
+		 * installed timekeeper clocksource and convert to it.
 		 */
-		if (system_counterval.cs_id == CSID_GENERIC ||
-		    !convert_base_to_cs(&system_counterval))
+		if (xtstamp->sys_counter.cs_id == CSID_GENERIC ||
+		    !convert_base_to_cs(&xtstamp->sys_counter))
 			return -ENODEV;
-		cycles = system_counterval.cycles;
+
+		cycles = syscnt_cycles = xtstamp->sys_counter.cycles;
 
 		/*
 		 * Check whether the system counter value provided by the
@@ -1573,24 +1574,19 @@ int get_device_system_crosststamp(int (*get_time_fn)
 		 * clocksource change
 		 */
 		if (!history_begin ||
-		    !timestamp_in_interval(history_begin->cycles,
-					   cycles, system_counterval.cycles) ||
+		    !timestamp_in_interval(history_begin->cycles, cycles, syscnt_cycles) ||
 		    history_begin->cs_was_changed_seq != cs_was_changed_seq)
 			return -EINVAL;
-		partial_history_cycles = cycles - system_counterval.cycles;
+
+		partial_history_cycles = cycles - syscnt_cycles;
 		total_history_cycles = cycles - history_begin->cycles;
-		discontinuity =
-			history_begin->clock_was_set_seq != clock_was_set_seq;
+		discontinuity = history_begin->clock_was_set_seq != clock_was_set_seq;
 
-		ret = adjust_historical_crosststamp(history_begin,
-						    partial_history_cycles,
-						    total_history_cycles,
-						    discontinuity, xtstamp);
-		if (ret)
-			return ret;
+		ret = adjust_historical_crosststamp(history_begin, partial_history_cycles,
+						    total_history_cycles, discontinuity, xtstamp);
 	}
 
-	return 0;
+	return ret;
 }
 EXPORT_SYMBOL_GPL(get_device_system_crosststamp);
 

  parent reply	other threads:[~2026-06-04  9:07 UTC|newest]

Thread overview: 85+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-29 19:59 [patch V2 00/25] timekeeping/ptp: Expand snapshot functionality Thomas Gleixner
2026-05-29 19:59 ` [patch V2 01/25] timekeeping: Provide ktime_get_snapshot_id() Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 19:59 ` [patch V2 02/25] timekeeping: Use system_time_snapshot::systime/monoraw instead of ::real/raw Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 19:59 ` [patch V2 03/25] pps: generators: Use ktime_get_real_ts64() instead of ktime_get_snapshot() Thomas Gleixner
2026-05-30 11:04   ` Rodolfo Giometti
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 04/25] pps: Convert to ktime_get_snapshot_id() Thomas Gleixner
2026-05-30 11:08   ` Rodolfo Giometti
2026-06-02  9:31     ` Thomas Gleixner
2026-06-02 10:56       ` David Woodhouse
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 05/25] KVM: arm64: Use ktime_get_snapshot_id() to retrieve CLOCK_BOOTTIME Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  1:55     ` Nathan Chancellor
2026-06-04  9:06       ` Thomas Gleixner
2026-06-04  9:08   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 06/25] KVM: arm64: Use ktime_get_snapshot_id() to snapshot CLOCK_REALTIME Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:08   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 07/25] ptp: ptp_vmclock: Convert to ktime_get_snapshot_id() Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 08/25] timekeeping: Remove system_time_snapshot::real/boot/raw Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 09/25] timekeeping: Add CLOCK_AUX support for ktime_get_snapshot_id() Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 10/25] timekeeping: Add system_counterval_t to struct system_device_crosststamp Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner [this message]
2026-05-29 20:00 ` [patch V2 11/25] timekeeping: Add CLOCK ID to system_device_crosststamp Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 12/25] wifi: iwlwifi: Adopt PTP cross timestamps to core changes Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 13/25] ice/ptp: Use provided clock ID for history snapshot Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 14/25] igc: " Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 15/25] net/mlx5: " Thomas Gleixner
2026-06-02  9:46   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 16/25] virtio_rtc: " Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-02 14:44   ` [patch V2 16/25] " Peter Hilber
2026-06-04  9:07   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 20:00 ` [patch V2 17/25] timekeeping: Remove ktime_get_snapshot() Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 18/25] timekeeping: Prepare for cross timestamps on arbitrary clock IDs Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-06-22  8:55   ` [patch V2 18/25] " David Woodhouse
2026-06-22 11:07     ` Thomas Gleixner
2026-06-22 12:34       ` David Woodhouse
2026-05-29 20:01 ` [patch V2 19/25] ptp: Use system_device_crosststamp::sys_systime Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 20/25] wifi: iwlwifi: " Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 21/25] ALSA: hda/common: " Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-02 17:46   ` [patch V2 21/25] " Takashi Iwai
2026-06-04  9:07   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 22/25] timekeeping: Remove system_device_crosststamp::sys_realtime Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 23/25] timekeeping: Add support for AUX clock cross timestamping Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 24/25] ptp: Switch to ktime_get_snapshot_id() for pre/post timestamps Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for Thomas Gleixner
2026-06-04  9:07   ` tip-bot2 for Thomas Gleixner
2026-05-29 20:01 ` [patch V2 25/25] timekeeping: Add clocksource read_snapshot() method and hw_cycles to snapshot Thomas Gleixner
2026-06-02  9:45   ` [tip: timers/ptp] " tip-bot2 for David Woodhouse
2026-06-04  9:07   ` tip-bot2 for David Woodhouse
2026-05-29 20:33 ` [patch V2 00/25] timekeeping/ptp: Expand snapshot functionality Jacob Keller
2026-06-01 10:59 ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=178056407541.710.2222085624536059784.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=akiyano@amazon.com \
    --cc=dwmw@amazon.co.uk \
    --cc=jacob.e.keller@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=tglx@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®