From: kan.liang@linux.intel.com
To: tglx@linutronix.de, jstultz@google.com, peterz@infradead.org,
mingo@redhat.com, linux-kernel@vger.kernel.org
Cc: sboyd@kernel.org, eranian@google.com, namhyung@kernel.org,
ak@linux.intel.com, adrian.hunter@intel.com,
Kan Liang <kan.liang@linux.intel.com>
Subject: [RFC PATCH V2 1/9] timekeeping: Expose the conversion information of monotonic raw
Date: Mon, 13 Feb 2023 11:07:46 -0800 [thread overview]
Message-ID: <20230213190754.1836051-2-kan.liang@linux.intel.com> (raw)
In-Reply-To: <20230213190754.1836051-1-kan.liang@linux.intel.com>
From: Kan Liang <kan.liang@linux.intel.com>
The conversion information of monotonic raw is not affected by NTP/PTP
correction. The perf tool can utilize the information to correctly
calculate the monotonic raw via a TSC in each PEBS record in the
post-processing stage.
The current conversion information is hidden in the internal
struct tk_read_base. Add a new external struct ktime_conv to store and
share the conversion information with other subsystems.
Add a new interface ktime_get_fast_mono_raw_conv() to expose the
conversion information of monotonic raw. The function probably be
invoked in a NMI. Use NMI safe tk_fast_raw to retrieve the conversion
information.
Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
---
include/linux/timekeeping.h | 18 ++++++++++++++++++
kernel/time/timekeeping.c | 24 ++++++++++++++++++++++++
2 files changed, 42 insertions(+)
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index fe1e467ba046..94ba02e7eb13 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -253,6 +253,21 @@ struct system_time_snapshot {
u8 cs_was_changed_seq;
};
+/**
+ * struct ktime_conv - Timestamp conversion information
+ * @mult: Multiplier for scaled math conversion
+ * @shift: Shift value for scaled math conversion
+ * @xtime_nsec: Shifted (fractional) nano seconds offset for readout
+ * @base: (nanoseconds) base time for readout
+ */
+struct ktime_conv {
+ u64 cycle_last;
+ u32 mult;
+ u32 shift;
+ u64 xtime_nsec;
+ u64 base;
+};
+
/**
* struct system_device_crosststamp - system/device cross-timestamp
* (synchronized capture)
@@ -297,6 +312,9 @@ extern void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot);
/* NMI safe mono/boot/realtime timestamps */
extern void ktime_get_fast_timestamps(struct ktime_timestamps *snap);
+/* NMI safe mono raw conv information */
+extern void ktime_get_fast_mono_raw_conv(struct ktime_conv *conv);
+
/*
* Persistent clock related interfaces
*/
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 5579ead449f2..a202b7a0a249 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -505,6 +505,30 @@ u64 notrace ktime_get_raw_fast_ns(void)
}
EXPORT_SYMBOL_GPL(ktime_get_raw_fast_ns);
+/**
+ * ktime_get_fast_mono_raw_conv - NMI safe access to get the conversion
+ * information of clock monotonic raw
+ *
+ * The conversion information is not affected by NTP/PTP correction.
+ */
+void ktime_get_fast_mono_raw_conv(struct ktime_conv *conv)
+{
+ struct tk_fast *tkf = &tk_fast_raw;
+ struct tk_read_base *tkr;
+ unsigned int seq;
+
+ do {
+ seq = raw_read_seqcount_latch(&tkf->seq);
+ tkr = tkf->base + (seq & 0x01);
+ conv->cycle_last = tkr->cycle_last;
+ conv->mult = tkr->mult;
+ conv->shift = tkr->shift;
+ conv->xtime_nsec = tkr->xtime_nsec;
+ conv->base = tkr->base;
+ } while (read_seqcount_latch_retry(&tkf->seq, seq));
+}
+EXPORT_SYMBOL_GPL(ktime_get_fast_mono_raw_conv);
+
/**
* ktime_get_boot_fast_ns - NMI safe and fast access to boot clock.
*
--
2.35.1
next prev parent reply other threads:[~2023-02-13 19:08 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-13 19:07 [RFC PATCH V2 0/9] Convert TSC to monotonic raw clock for PEBS kan.liang
2023-02-13 19:07 ` kan.liang [this message]
2023-02-13 19:28 ` [RFC PATCH V2 1/9] timekeeping: Expose the conversion information of monotonic raw John Stultz
2023-02-13 19:07 ` [RFC PATCH V2 2/9] perf: Extend ABI to support post-processing monotonic raw conversion kan.liang
2023-02-13 19:37 ` John Stultz
2023-02-13 21:40 ` Liang, Kan
2023-02-13 22:22 ` John Stultz
2023-02-14 10:43 ` Peter Zijlstra
2023-02-14 17:46 ` Liang, Kan
2023-02-14 19:37 ` John Stultz
2023-02-14 20:09 ` Liang, Kan
2023-02-14 20:21 ` John Stultz
2023-03-12 20:50 ` Andi Kleen
2023-02-14 19:34 ` John Stultz
2023-02-14 14:51 ` Liang, Kan
2023-02-14 17:00 ` Liang, Kan
2023-02-14 20:11 ` John Stultz
2023-02-14 20:38 ` Liang, Kan
2023-02-17 23:11 ` John Stultz
2023-03-08 18:44 ` Liang, Kan
2023-03-09 1:17 ` John Stultz
2023-03-09 16:56 ` Liang, Kan
2023-03-11 5:55 ` John Stultz
2023-03-13 21:19 ` Liang, Kan
2023-03-18 6:02 ` John Stultz
2023-03-21 15:26 ` Liang, Kan
2023-02-14 19:52 ` John Stultz
2023-02-13 19:07 ` [RFC PATCH V2 3/9] perf/x86: Factor out x86_pmu_sample_preload() kan.liang
2023-02-13 19:07 ` [RFC PATCH V2 4/9] perf/x86: Enable post-processing monotonic raw conversion kan.liang
2023-02-14 20:02 ` Thomas Gleixner
2023-02-14 20:21 ` Liang, Kan
2023-02-14 20:55 ` Thomas Gleixner
2023-03-21 15:38 ` Liang, Kan
2023-02-13 19:07 ` [RFC PATCH V2 5/9] perf/x86/intel: Enable large PEBS for monotonic raw kan.liang
2023-02-13 19:07 ` [RFC PATCH V2 6/9] tools headers UAPI: Sync linux/perf_event.h with the kernel sources kan.liang
2023-02-13 19:07 ` [RFC PATCH V2 7/9] perf session: Support the monotonic raw clock conversion information kan.liang
2023-02-13 19:07 ` [RFC PATCH V2 8/9] perf evsel, tsc: Support the monotonic raw clock conversion kan.liang
2023-02-13 19:07 ` [RFC PATCH V2 9/9] perf evsel: Enable post-processing monotonic raw conversion by default kan.liang
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=20230213190754.1836051-2-kan.liang@linux.intel.com \
--to=kan.liang@linux.intel.com \
--cc=adrian.hunter@intel.com \
--cc=ak@linux.intel.com \
--cc=eranian@google.com \
--cc=jstultz@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=sboyd@kernel.org \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.