From: Christopher S. Hall <christopher.s.hall@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH v8 2/8] time: Add timekeeping snapshot code capturing system time and counter
Date: Mon, 22 Feb 2016 03:15:20 -0800 [thread overview]
Message-ID: <1456139726-3327-3-git-send-email-christopher.s.hall@intel.com> (raw)
In-Reply-To: <1456139726-3327-1-git-send-email-christopher.s.hall@intel.com>
In the current timekeeping code there isn't any interface to
atomically capture the current relationship between the system counter
and system time. ktime_get_snapshot() returns this triple (counter,
monotonic raw, realtime) in the system_time_snapshot struct.
Signed-off-by: Christopher S. Hall <christopher.s.hall@intel.com>
[jstultz: Moved structure definitions around to clean things up]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
include/linux/timekeeping.h | 18 ++++++++++++++++++
kernel/time/timekeeping.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index ec89d84..af220e1 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -267,6 +267,24 @@ extern void ktime_get_raw_and_real_ts64(struct timespec64 *ts_raw,
struct timespec64 *ts_real);
/*
+ * struct system_time_snapshot - simultaneous raw/real time capture with
+ * counter value
+ * @cycles: Clocksource counter value to produce the system times
+ * @real: Realtime system time
+ * @raw: Monotonic raw system time
+ */
+struct system_time_snapshot {
+ cycles_t cycles;
+ ktime_t real;
+ ktime_t raw;
+};
+
+/*
+ * Simultaneously snapshot realtime and monotonic raw clocks
+ */
+extern void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot);
+
+/*
* Persistent clock related interfaces
*/
extern int persistent_clock_is_local;
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 4243d28..89b4695 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -874,6 +874,36 @@ time64_t __ktime_get_real_seconds(void)
return tk->xtime_sec;
}
+/**
+ * ktime_get_snapshot - snapshots the realtime/monotonic raw clocks with counter
+ * @systime_snapshot: pointer to struct receiving the system time snapshot
+ */
+void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
+{
+ struct timekeeper *tk = &tk_core.timekeeper;
+ unsigned long seq;
+ ktime_t base_raw;
+ ktime_t base_real;
+ s64 nsec_raw;
+ s64 nsec_real;
+ cycle_t now;
+
+ do {
+ seq = read_seqcount_begin(&tk_core.seq);
+
+ now = tk->tkr_mono.read(tk->tkr_mono.clock);
+ base_real = ktime_add(tk->tkr_mono.base,
+ tk_core.timekeeper.offs_real);
+ base_raw = tk->tkr_raw.base;
+ nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono, now);
+ nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw, now);
+ } while (read_seqcount_retry(&tk_core.seq, seq));
+
+ systime_snapshot->cycles = now;
+ systime_snapshot->real = ktime_add_ns(base_real, nsec_real);
+ systime_snapshot->raw = ktime_add_ns(base_raw, nsec_raw);
+}
+EXPORT_SYMBOL_GPL(ktime_get_snapshot);
#ifdef CONFIG_NTP_PPS
--
2.1.4
WARNING: multiple messages have this Message-ID (diff)
From: "Christopher S. Hall" <christopher.s.hall@intel.com>
To: tglx@linutronix.de, richardcochran@gmail.com, mingo@redhat.com,
john.stultz@linaro.org, hpa@zytor.com,
jeffrey.t.kirsher@intel.com
Cc: "Christopher S. Hall" <christopher.s.hall@intel.com>,
x86@kernel.org, linux-kernel@vger.kernel.org,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
kevin.b.stanton@intel.com, kevin.j.clarke@intel.com
Subject: [PATCH v8 2/8] time: Add timekeeping snapshot code capturing system time and counter
Date: Mon, 22 Feb 2016 03:15:20 -0800 [thread overview]
Message-ID: <1456139726-3327-3-git-send-email-christopher.s.hall@intel.com> (raw)
In-Reply-To: <1456139726-3327-1-git-send-email-christopher.s.hall@intel.com>
In the current timekeeping code there isn't any interface to
atomically capture the current relationship between the system counter
and system time. ktime_get_snapshot() returns this triple (counter,
monotonic raw, realtime) in the system_time_snapshot struct.
Signed-off-by: Christopher S. Hall <christopher.s.hall@intel.com>
[jstultz: Moved structure definitions around to clean things up]
Signed-off-by: John Stultz <john.stultz@linaro.org>
---
include/linux/timekeeping.h | 18 ++++++++++++++++++
kernel/time/timekeeping.c | 30 ++++++++++++++++++++++++++++++
2 files changed, 48 insertions(+)
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index ec89d84..af220e1 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -267,6 +267,24 @@ extern void ktime_get_raw_and_real_ts64(struct timespec64 *ts_raw,
struct timespec64 *ts_real);
/*
+ * struct system_time_snapshot - simultaneous raw/real time capture with
+ * counter value
+ * @cycles: Clocksource counter value to produce the system times
+ * @real: Realtime system time
+ * @raw: Monotonic raw system time
+ */
+struct system_time_snapshot {
+ cycles_t cycles;
+ ktime_t real;
+ ktime_t raw;
+};
+
+/*
+ * Simultaneously snapshot realtime and monotonic raw clocks
+ */
+extern void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot);
+
+/*
* Persistent clock related interfaces
*/
extern int persistent_clock_is_local;
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 4243d28..89b4695 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -874,6 +874,36 @@ time64_t __ktime_get_real_seconds(void)
return tk->xtime_sec;
}
+/**
+ * ktime_get_snapshot - snapshots the realtime/monotonic raw clocks with counter
+ * @systime_snapshot: pointer to struct receiving the system time snapshot
+ */
+void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot)
+{
+ struct timekeeper *tk = &tk_core.timekeeper;
+ unsigned long seq;
+ ktime_t base_raw;
+ ktime_t base_real;
+ s64 nsec_raw;
+ s64 nsec_real;
+ cycle_t now;
+
+ do {
+ seq = read_seqcount_begin(&tk_core.seq);
+
+ now = tk->tkr_mono.read(tk->tkr_mono.clock);
+ base_real = ktime_add(tk->tkr_mono.base,
+ tk_core.timekeeper.offs_real);
+ base_raw = tk->tkr_raw.base;
+ nsec_real = timekeeping_cycles_to_ns(&tk->tkr_mono, now);
+ nsec_raw = timekeeping_cycles_to_ns(&tk->tkr_raw, now);
+ } while (read_seqcount_retry(&tk_core.seq, seq));
+
+ systime_snapshot->cycles = now;
+ systime_snapshot->real = ktime_add_ns(base_real, nsec_real);
+ systime_snapshot->raw = ktime_add_ns(base_raw, nsec_raw);
+}
+EXPORT_SYMBOL_GPL(ktime_get_snapshot);
#ifdef CONFIG_NTP_PPS
--
2.1.4
next prev parent reply other threads:[~2016-02-22 11:15 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-22 11:15 [Intel-wired-lan] [PATCH v8 0/8] Patchset enabling hardware based cross-timestamps for next gen Intel platforms Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 1/8] time: Add cycles to nanoseconds translation Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 10:49 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 10:49 ` Thomas Gleixner
2016-02-22 11:15 ` Christopher S. Hall [this message]
2016-02-22 11:15 ` [PATCH v8 2/8] time: Add timekeeping snapshot code capturing system time and counter Christopher S. Hall
2016-02-24 10:51 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 10:51 ` Thomas Gleixner
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 3/8] time: Remove duplicated code in ktime_get_raw_and_real() Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 10:52 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 10:52 ` Thomas Gleixner
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 4/8] time: Add driver cross timestamp interface for higher precision time synchronization Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 10:54 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 10:54 ` Thomas Gleixner
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 5/8] time: Add history to cross timestamp interface supporting slower devices Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 10:56 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 10:56 ` Thomas Gleixner
2016-02-24 23:07 ` [Intel-wired-lan] " John Stultz
2016-02-24 23:07 ` John Stultz
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 6/8] x86: tsc: Always Running Timer (ART) correlated clocksource Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 11:00 ` [Intel-wired-lan] " Thomas Gleixner
2016-02-24 11:00 ` Thomas Gleixner
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 7/8] ptp: Add PTP_SYS_OFFSET_PRECISE for driver crosstimestamping Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-22 11:15 ` [Intel-wired-lan] [PATCH v8 8/8] net: e1000e: Adds hardware supported cross timestamp on e1000e nic Christopher S. Hall
2016-02-22 11:15 ` Christopher S. Hall
2016-02-24 20:22 ` [Intel-wired-lan] " Jeff Kirsher
2016-02-24 20:22 ` Jeff Kirsher
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=1456139726-3327-3-git-send-email-christopher.s.hall@intel.com \
--to=christopher.s.hall@intel.com \
--cc=intel-wired-lan@osuosl.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 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.