On Mon, Jan 04, 2016 at 04:45:22AM -0800, Christopher S. Hall wrote: > @@ -138,6 +142,7 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, > unsigned long arg) > caps.n_per_out = ptp->info->n_per_out; > caps.pps = ptp->info->pps; > caps.n_pins = ptp->info->n_pins; > + caps.cross_timestamping = ptp->info->getsynctime != NULL; > if (copy_to_user((void __user *)arg, &caps, sizeof(caps))) > err = -EFAULT; > break; > @@ -180,6 +185,32 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, > unsigned long arg) > err = ops->enable(ops, &req, enable); > break; > > + case PTP_SYS_OFFSET_PRECISE: > + if (!ptp->info->getsynctime) { > + err = -EINVAL;
-EOPNOTSUPP would be better here. > + break; > + } > + err = ptp->info->getsynctime(ptp->info, &xtstamp); > + if (err) > + break; > + > + precise_offset.sys_real.sec = > + div_u64_rem(ktime_to_ns(xtstamp.sys_realtime), > + NSEC_PER_SEC, &rem); > + precise_offset.sys_real.nsec = rem; How about this instead: ts = ktime_to_timespec64(xtstamp.sys_realtime); precise_offset.sys_real.sec = ts.tv_sec; precise_offset.sys_real.nsec = ts.tv_nsec; > + precise_offset.sys_raw.sec = > + div_u64_rem(ktime_to_ns(xtstamp.sys_monoraw), > + NSEC_PER_SEC, &rem); > + precise_offset.sys_raw.nsec = rem; > + precise_offset.dev.sec = > + div_u64_rem(ktime_to_ns(xtstamp.device), NSEC_PER_SEC, > + &rem); > + precise_offset.dev.nsec = rem; And for these as well. Thanks, Richard -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html