To prepare for a new PTP IOCTL, which exposes the raw counter value along
with the requested system time snapshot, switch the pre/post time stamp
sampling over to use ktime_get_snapshot_id() and fix up all usage sites.

No functional change intended.

The ptp_vmclock conversion was simplified by David Woodhouse.

Signed-off-by: Thomas Gleixner <[email protected]>
---
 drivers/net/dsa/sja1105/sja1105_main.c |    8 ++++----
 drivers/ptp/ptp_chardev.c              |   14 +++++++++-----
 drivers/ptp/ptp_ocp.c                  |   11 ++++-------
 drivers/ptp/ptp_vmclock.c              |   23 +++++++----------------
 include/linux/ptp_clock_kernel.h       |   15 ++++++++-------
 5 files changed, 32 insertions(+), 39 deletions(-)

--- a/drivers/net/dsa/sja1105/sja1105_main.c
+++ b/drivers/net/dsa/sja1105/sja1105_main.c
@@ -2310,10 +2310,10 @@ int sja1105_static_config_reload(struct
                goto out;
        }
 
-       t1 = timespec64_to_ns(&ptp_sts_before.pre_ts);
-       t2 = timespec64_to_ns(&ptp_sts_before.post_ts);
-       t3 = timespec64_to_ns(&ptp_sts_after.pre_ts);
-       t4 = timespec64_to_ns(&ptp_sts_after.post_ts);
+       t1 = ktime_to_ns(ptp_sts_before.pre_sts.sys);
+       t2 = ktime_to_ns(ptp_sts_before.post_sts.sys);
+       t3 = ktime_to_ns(ptp_sts_after.pre_sts.sys);
+       t4 = ktime_to_ns(ptp_sts_after.post_sts.sys);
        /* Mid point, corresponds to pre-reset PTPCLKVAL */
        t12 = t1 + (t2 - t1) / 2;
        /* Mid point, corresponds to post-reset PTPCLKVAL, aka 0 */
--- a/drivers/ptp/ptp_chardev.c
+++ b/drivers/ptp/ptp_chardev.c
@@ -386,15 +386,19 @@ static long ptp_sys_offset_extended(stru
                        return err;
 
                /* Filter out disabled or unavailable clocks */
-               if (sts.pre_ts.tv_sec < 0 || sts.post_ts.tv_sec < 0)
+               if (!sts.pre_sts.valid || !sts.post_sts.valid)
                        return -EINVAL;
 
-               extoff->ts[i][0].sec = sts.pre_ts.tv_sec;
-               extoff->ts[i][0].nsec = sts.pre_ts.tv_nsec;
                extoff->ts[i][1].sec = ts.tv_sec;
                extoff->ts[i][1].nsec = ts.tv_nsec;
-               extoff->ts[i][2].sec = sts.post_ts.tv_sec;
-               extoff->ts[i][2].nsec = sts.post_ts.tv_nsec;
+
+               ts = ktime_to_timespec64(sts.pre_sts.sys);
+               extoff->ts[i][0].sec = ts.tv_sec;
+               extoff->ts[i][0].nsec = ts.tv_nsec;
+
+               ts = ktime_to_timespec64(sts.post_sts.sys);
+               extoff->ts[i][2].sec = ts.tv_sec;
+               extoff->ts[i][2].nsec = ts.tv_nsec;
        }
 
        return copy_to_user(arg, extoff, sizeof(*extoff)) ? -EFAULT : 0;
--- a/drivers/ptp/ptp_ocp.c
+++ b/drivers/ptp/ptp_ocp.c
@@ -1491,11 +1491,8 @@ static int
        }
        ptp_read_system_postts(sts);
 
-       if (sts && bp->ts_window_adjust) {
-               s64 ns = timespec64_to_ns(&sts->post_ts);
-
-               sts->post_ts = ns_to_timespec64(ns - bp->ts_window_adjust);
-       }
+       if (sts && bp->ts_window_adjust)
+               sts->post_ts.sys -= bp->ts_window_adjust;
 
        time_ns = ioread32(&bp->reg->time_ns);
        time_sec = ioread32(&bp->reg->time_sec);
@@ -4595,8 +4592,8 @@ ptp_ocp_summary_show(struct seq_file *s,
                struct timespec64 sys_ts;
                s64 pre_ns, post_ns, ns;
 
-               pre_ns = timespec64_to_ns(&sts.pre_ts);
-               post_ns = timespec64_to_ns(&sts.post_ts);
+               pre_ns = ktime_to_ns(sts.pre_sts.sys);
+               post_ns = ktime_to_ns(sts.post_sts.sys);
                ns = (pre_ns + post_ns) / 2;
                ns += (s64)bp->utc_tai_offset * NSEC_PER_SEC;
                sys_ts = ns_to_timespec64(ns);
--- a/drivers/ptp/ptp_vmclock.c
+++ b/drivers/ptp/ptp_vmclock.c
@@ -101,7 +101,6 @@ static int vmclock_get_crosststamp(struc
                                   struct timespec64 *tspec)
 {
        ktime_t deadline = ktime_add(ktime_get(), VMCLOCK_MAX_WAIT);
-       struct system_time_snapshot systime_snapshot;
        uint64_t cycle, delta, seq, frac_sec;
 
 #ifdef CONFIG_X86
@@ -132,17 +131,15 @@ static int vmclock_get_crosststamp(struc
                 * will be derived from the *same* counter value.
                 *
                 * If the system isn't using the same counter, then the value
-                * from ktime_get_snapshot_id() will still be used as pre_ts, 
and
-                * ptp_read_system_postts() is called to populate postts after
-                * calling get_cycles().
-                *
-                * The conversion to timespec64 happens further down, outside
-                * the seq_count loop.
+                * from ptp_read_system_prets() will still be used as pre_ts,
+                * and ptp_read_system_postts() is called to populate postts
+                * after calling get_cycles().
                 */
                if (sts) {
-                       ktime_get_snapshot_id(&systime_snapshot, 
CLOCK_REALTIME);
-                       if (systime_snapshot.cs_id == st->cs_id) {
-                               cycle = systime_snapshot.cycles;
+                       ptp_read_system_prets(sts);
+                       if (sts->pre_sts.cs_id == st->cs_id) {
+                               cycle = sts->pre_sts.cycles;
+                               sts->post_sts = sts->pre_sts;
                        } else {
                                cycle = get_cycles();
                                ptp_read_system_postts(sts);
@@ -180,12 +177,6 @@ static int vmclock_get_crosststamp(struc
                system_counter->cs_id = st->cs_id;
        }
 
-       if (sts) {
-               sts->pre_ts = ktime_to_timespec64(systime_snapshot.sys);
-               if (systime_snapshot.cs_id == st->cs_id)
-                       sts->post_ts = sts->pre_ts;
-       }
-
        return 0;
 }
 
--- a/include/linux/ptp_clock_kernel.h
+++ b/include/linux/ptp_clock_kernel.h
@@ -12,6 +12,7 @@
 #include <linux/pps_kernel.h>
 #include <linux/ptp_clock.h>
 #include <linux/timecounter.h>
+#include <linux/timekeeping.h>
 #include <linux/skbuff.h>
 
 #define PTP_CLOCK_NAME_LEN     32
@@ -45,13 +46,13 @@ struct system_device_crosststamp;
 
 /**
  * struct ptp_system_timestamp - system time corresponding to a PHC timestamp
- * @pre_ts: system timestamp before capturing PHC
- * @post_ts: system timestamp after capturing PHC
- * @clockid: clock-base used for capturing the system timestamps
+ * @pre_sts:   system time snapshot before capturing PHC
+ * @post_sts:  system time snapshot after capturing PHC
+ * @clockid:   clock-base used for capturing the system timestamps
  */
 struct ptp_system_timestamp {
-       struct timespec64 pre_ts;
-       struct timespec64 post_ts;
+       struct system_time_snapshot pre_sts;
+       struct system_time_snapshot post_sts;
        clockid_t clockid;
 };
 
@@ -510,13 +511,13 @@ static inline ktime_t ptp_convert_timest
 static inline void ptp_read_system_prets(struct ptp_system_timestamp *sts)
 {
        if (sts)
-               ktime_get_clock_ts64(sts->clockid, &sts->pre_ts);
+               ktime_get_snapshot_id(&sts->pre_sts, sts->clockid);
 }
 
 static inline void ptp_read_system_postts(struct ptp_system_timestamp *sts)
 {
        if (sts)
-               ktime_get_clock_ts64(sts->clockid, &sts->post_ts);
+               ktime_get_snapshot_id(&sts->post_sts, sts->clockid);
 }
 
 #endif


Reply via email to