The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Thomas Gleixner <tglx@kernel.org>
To: "Thomas Weißschuh" <thomas.weissschuh@linutronix.de>
Cc: LKML <linux-kernel@vger.kernel.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Miroslav Lichvar <mlichvar@redhat.com>,
	John Stultz <jstultz@google.com>, Stephen Boyd <sboyd@kernel.org>,
	Anna-Maria Behnsen <anna-maria@linutronix.de>,
	Frederic Weisbecker <frederic@kernel.org>,
	Arthur Kiyanovski <akiyano@amazon.com>,
	Rodolfo Giometti <giometti@enneenne.com>,
	Vincent Donnefort <vdonnefort@google.com>,
	Marc Zyngier <maz@kernel.org>,
	Oliver Upton <oliver.upton@linux.dev>,
	kvmarm@lists.linux.dev, Oliver Upton <oupton@kernel.org>,
	Richard Cochran <richardcochran@gmail.com>,
	netdev@vger.kernel.org, Takashi Iwai <tiwai@suse.com>,
	Miri Korenblit <miriam.rachel.korenblit@intel.com>,
	Johannes Berg <johannes.berg@intel.com>,
	Jacob Keller <jacob.e.keller@intel.com>,
	Tony Nguyen <anthony.l.nguyen@intel.com>,
	Saeed Mahameed <saeedm@nvidia.com>,
	Peter Hilber <peter.hilber@oss.qualcomm.com>,
	"Michael S. Tsirkin" <mst@redhat.com>,
	virtualization@lists.linux.dev, linux-wireless@vger.kernel.org,
	linux-sound@vger.kernel.org
Subject: [PATCH] timekeeping: Document monotonic raw timestamps in snapshots correctly
Date: Sun, 05 Jul 2026 14:38:04 +0200	[thread overview]
Message-ID: <87wlv9k3wz.ffs@fw13> (raw)
In-Reply-To: <87bjctsptt.ffs@fw13>

The comments related to raw monotonic timestamps for the various
snapshot mechanisms in code and struct documentation are ambiguous. They
reference them as CLOCK_MONOTONIC_RAW timestamps, but with the arrival
of AUX clocks that's not longer correct.

The raw monotonic timestamps only represent CLOCK_MONOTONIC_RAW for the
system time clock IDs, i.e. REALTIME, MONOTONIC, BOOTTIME, TAI.

For AUX clocks they refer to the monotonic raw clock which is related to
the individual AUX clocks. These monotonic raw timestamps have the same
conversion factor as CLOCK_MONOTONIC_RAW, but differ from that by an
offset:

	MONORAW(AUX$N) = MONORAW(SYSTEM) + OFFSET(AUX$N)

The offset is established when a AUX clock is enabled and stays constant
for the lifetime of the AUX clock.

Update the comments so they reflect reality.

Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Reported-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
---
 include/linux/timekeeping.h |   10 +++++++++-
 kernel/time/timekeeping.c   |   16 +++++++++++++++-
 2 files changed, 24 insertions(+), 2 deletions(-)

--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -276,7 +276,7 @@ static inline bool ktime_get_aux_ts64(cl
 #endif
 
 /**
- * struct system_time_snapshot - Simultaneous time capture of CLOCK_MONOTONIC_RAW,
+ * struct system_time_snapshot - Simultaneous time capture of monotonic raw time,
  *				 a selected CLOCK_* and the clocksource counter value
  * @cycles:		Clocksource counter value to produce the system times
  * @hw_cycles:		For derived clocksources, the hardware counter value from
@@ -289,6 +289,10 @@ static inline bool ktime_get_aux_ts64(cl
  * @clock_was_set_seq:	The sequence number of clock-was-set events
  * @cs_was_changed_seq:	The sequence number of clocksource change events
  * @valid:		True if the snapshot is valid
+ *
+ * @monoraw is CLOCK_MONOTONIC_RAW for system time CLOCK ids. For CLOCK_AUX$N
+ * clock ids it's the monotonic raw time related to the AUX clock, which is
+ * CLOCK_MONOTONIC_RAW plus a AUX clock specific offset.
  */
 struct system_time_snapshot {
 	u64			cycles;
@@ -326,6 +330,10 @@ struct system_counterval_t {
  * @sys_counter:	Clocksource counter value simultaneous with device time
  * @sys_systime:	System time for @clock_id
  * @sys_monoraw:	Monotonic raw simultaneous with device time
+ *
+ * @sys_monoraw is CLOCK_MONOTONIC_RAW for system time CLOCK ids. For
+ * CLOCK_AUX$N clock ids it's the monotonic raw time related to the AUX clock,
+ * which is CLOCK_MONOTONIC_RAW plus a AUX clock specific offset.
  */
 struct system_device_crosststamp {
 	clockid_t			clock_id;
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1202,10 +1202,21 @@ static inline u64 tk_clock_read_snapshot
 
 /**
  * ktime_get_snapshot_id -  Simultaneously snapshot a given clock ID with
- *			    CLOCK_MONOTONIC_RAW and the underlying
+ *			    the corresponding monotonic raw and the underlying
  *			    clocksource counter value.
  * @clock_id:		The clock ID to snapshot
  * @systime_snapshot:	Pointer to struct receiving the system time snapshot
+ *
+ * For the system time keeping clocks (REALTIME, MONOTONIC and BOOTTIME) the
+ * monotonic raw clock is CLOCK_MONOTONIC_RAW. For AUX clocks this is the
+ * monotonic raw clock related to the AUX clock. These AUX clock related
+ * monotonic raw clocks have a strict linear offset to the system time
+ * CLOCK_MONOTONIC_RAW:
+ *
+ *	MONOTONIC_RAW(AUX$N) = CLOCK_MONOTONIC_RAW(system) + offset(AUX$N)
+ *
+ * The offset is established when a AUX clock is initialized, but it is
+ * currently not accessible.
  */
 void ktime_get_snapshot_id(clockid_t clock_id, struct system_time_snapshot *systime_snapshot)
 {
@@ -1512,6 +1523,9 @@ EXPORT_SYMBOL_GPL(ktime_real_to_base_clo
  * @xtstamp:		Receives simultaneously captured system and device time
  *
  * Reads a timestamp from a device and correlates it to system time
+ *
+ * See documentation for ktime_get_snapshot_id() for information about the raw
+ * monotonic time stamp which is used here.
  */
 int get_device_system_crosststamp(int (*get_time_fn)
 				  (ktime_t *device_time,

  reply	other threads:[~2026-07-05 12:38 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-05-26 17:13 [patch 00/24] timekeeping/ptp: Expand snapshot functionality Thomas Gleixner
2026-05-26 17:13 ` [patch 01/24] timekeeping: Provide ktime_get_snapshot_id() Thomas Gleixner
2026-05-26 21:41   ` Jacob Keller
2026-05-27 15:58     ` Thomas Gleixner
2026-05-26 23:39   ` David Woodhouse
2026-05-27  6:56   ` Thomas Weißschuh
2026-05-26 17:13 ` [patch 02/24] timekeeping: Use system_time_snapshot::sys instead of ::real Thomas Gleixner
2026-05-26 23:40   ` [PATCH 2/24] " David Woodhouse
2026-05-27  6:58   ` [patch 02/24] " Thomas Weißschuh
2026-05-26 17:13 ` [patch 03/24] pps: generators: Use ktime_get_real_ts64() instead of ktime_get_snapshot() Thomas Gleixner
2026-05-26 23:42   ` [PATCH 3/24] " David Woodhouse
2026-05-27  7:00   ` [patch 03/24] " Thomas Weißschuh
2026-05-26 17:13 ` [patch 04/24] pps: Convert to ktime_get_snapshot_id() Thomas Gleixner
2026-05-26 23:42   ` [PATCH 4/24] " David Woodhouse
2026-05-27  7:02   ` [patch 04/24] " Thomas Weißschuh
2026-05-27 16:02     ` Thomas Gleixner
2026-05-26 17:13 ` [patch 05/24] KVM: arm64: Use ktime_get_snapshot_id() to retrieve CLOCK_BOOTTIME Thomas Gleixner
2026-05-26 23:42   ` [PATCH 5/24] " David Woodhouse
2026-05-27  7:02   ` [patch 05/24] " Thomas Weißschuh
2026-05-27  9:02   ` Marc Zyngier
2026-05-27 16:28   ` Vincent Donnefort
2026-05-26 17:13 ` [patch 06/24] KVM: arm64: Use ktime_get_snapshot_id() to snapshot CLOCK_REALTIME Thomas Gleixner
2026-05-26 23:43   ` [PATCH 6/24] " David Woodhouse
2026-05-27  7:03   ` [patch 06/24] " Thomas Weißschuh
2026-05-27  9:03   ` Marc Zyngier
2026-05-26 17:14 ` [patch 07/24] ptp: ptp_vmclock: Convert to ktime_get_snapshot_id() Thomas Gleixner
2026-05-26 23:43   ` [PATCH 7/24] " David Woodhouse
2026-05-27  7:10   ` [patch 07/24] " Thomas Weißschuh
2026-05-26 17:14 ` [patch 08/24] timekeeping: Remove system_time_snapshot::real/boot Thomas Gleixner
2026-05-26 21:49   ` Jacob Keller
2026-05-26 21:52     ` Jacob Keller
2026-05-26 23:44   ` [PATCH 8/24] " David Woodhouse
2026-05-27  7:17   ` [patch 08/24] " Thomas Weißschuh
2026-05-26 17:14 ` [patch 09/24] timekeeping: Add CLOCK_AUX support for ktime_get_snapshot_id() Thomas Gleixner
2026-05-26 23:44   ` [PATCH 9/24] " David Woodhouse
2026-05-27  7:18   ` [patch 09/24] " Thomas Weißschuh
2026-06-26  8:48   ` Thomas Weißschuh
2026-06-26 10:49     ` Thomas Gleixner
2026-06-26 11:03       ` Thomas Weißschuh
2026-06-26 15:17         ` Thomas Gleixner
2026-06-29  3:55           ` Thomas Weißschuh
2026-06-29  8:39             ` Thomas Gleixner
2026-07-05 12:38               ` Thomas Gleixner [this message]
2026-07-06  8:42                 ` [PATCH] timekeeping: Document monotonic raw timestamps in snapshots correctly Thomas Weißschuh
2026-07-06 15:52                 ` [tip: timers/core] " tip-bot2 for Thomas Gleixner
2026-06-26 10:51     ` [patch 09/24] timekeeping: Add CLOCK_AUX support for ktime_get_snapshot_id() David Woodhouse
2026-05-26 17:14 ` [patch 10/24] timekeeping: Add system_counterval_t to struct system_device_crosststamp Thomas Gleixner
2026-05-26 23:45   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 11/24] timekeeping: Add CLOCK ID to system_device_crosststamp Thomas Gleixner
2026-05-26 23:46   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 12/24] wifi: iwlwifi: Adopt PTP cross timestamps to core changes Thomas Gleixner
2026-05-26 23:47   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 13/24] ice/ptp: Use provided clock ID for history snapshot Thomas Gleixner
2026-05-26 21:51   ` Jacob Keller
2026-05-26 23:49   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 14/24] igc: " Thomas Gleixner
2026-05-26 21:51   ` Jacob Keller
2026-05-26 23:50   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 15/24] net/mlx5: " Thomas Gleixner
2026-05-26 23:51   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 16/24] virtio_rtc: " Thomas Gleixner
2026-05-26 23:51   ` [PATCH " David Woodhouse
2026-05-26 17:14 ` [patch 17/24] timekeeping: Remove ktime_get_snapshot() Thomas Gleixner
2026-05-26 23:52   ` [PATCH " David Woodhouse
2026-05-27  7:20   ` [patch " Thomas Weißschuh
2026-05-26 17:14 ` [patch 18/24] timekeeping: Prepare for cross timestamps on arbitrary clock IDs Thomas Gleixner
2026-05-26 23:54   ` [PATCH " David Woodhouse
2026-05-27  7:23   ` [patch " Thomas Weißschuh
2026-05-26 17:15 ` [patch 19/24] ptp: Use system_device_crosststamp::sys_systime Thomas Gleixner
2026-05-26 23:54   ` [PATCH " David Woodhouse
2026-05-26 17:15 ` [patch 20/24] wifi: iwlwifi: " Thomas Gleixner
2026-05-26 23:55   ` [PATCH " David Woodhouse
2026-05-26 17:15 ` [patch 21/24] ALSA: hda/common: " Thomas Gleixner
2026-05-26 23:55   ` [PATCH " David Woodhouse
2026-05-26 17:15 ` [patch 22/24] timekeeping: Remove system_device_crosststamp::sys_realtime Thomas Gleixner
2026-05-26 23:56   ` [PATCH " David Woodhouse
2026-05-27  7:24   ` [patch " Thomas Weißschuh
2026-05-26 17:15 ` [patch 23/24] timekeeping: Add support for AUX clock cross timestamping Thomas Gleixner
2026-05-26 23:56   ` [PATCH " David Woodhouse
2026-05-27  7:24   ` [patch " Thomas Weißschuh
2026-05-26 17:15 ` [patch 24/24] ptp: Switch to ktime_get_snapshot_id() for pre/post timestamps Thomas Gleixner
2026-05-26 23:57   ` [PATCH " David Woodhouse
2026-05-27 13:10   ` [patch " Vadim Fedorenko
2026-05-27 23:56   ` Jakub Kicinski
2026-05-28 13:55     ` Thomas Gleixner
2026-05-26 21:56 ` [patch 00/24] timekeeping/ptp: Expand snapshot functionality Jacob Keller
2026-05-27  3:55 ` [PATCH 0/24] " Arthur Kiyanovski

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=87wlv9k3wz.ffs@fw13 \
    --to=tglx@kernel.org \
    --cc=akiyano@amazon.com \
    --cc=anna-maria@linutronix.de \
    --cc=anthony.l.nguyen@intel.com \
    --cc=dwmw2@infradead.org \
    --cc=frederic@kernel.org \
    --cc=giometti@enneenne.com \
    --cc=jacob.e.keller@intel.com \
    --cc=johannes.berg@intel.com \
    --cc=jstultz@google.com \
    --cc=kvmarm@lists.linux.dev \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-sound@vger.kernel.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=miriam.rachel.korenblit@intel.com \
    --cc=mlichvar@redhat.com \
    --cc=mst@redhat.com \
    --cc=netdev@vger.kernel.org \
    --cc=oliver.upton@linux.dev \
    --cc=oupton@kernel.org \
    --cc=peter.hilber@oss.qualcomm.com \
    --cc=richardcochran@gmail.com \
    --cc=saeedm@nvidia.com \
    --cc=sboyd@kernel.org \
    --cc=thomas.weissschuh@linutronix.de \
    --cc=tiwai@suse.com \
    --cc=vdonnefort@google.com \
    --cc=virtualization@lists.linux.dev \
    /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