diff options
author | Richard Cochran <richardcochran@gmail.com> | 2015-03-29 23:11:52 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-31 18:01:16 +0200 |
commit | e13cfcb03eeccb97d3f8deb393304c6190b61da9 (patch) | |
tree | 5d2270509d1297275040c55feb850a144dd31210 /drivers/ptp | |
parent | ptp: introduce get/set time methods with explicit 64 bit seconds. (diff) | |
download | linux-e13cfcb03eeccb97d3f8deb393304c6190b61da9.tar.xz linux-e13cfcb03eeccb97d3f8deb393304c6190b61da9.zip |
ptp: use the 64 bit gettime method for the SYS_OFFSET ioctl.
This patch changes the code to use the new method whenever implemented by
the PHC driver.
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/ptp')
-rw-r--r-- | drivers/ptp/ptp_chardev.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c index f8a76090cbca..95bcf1525a84 100644 --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -124,7 +124,8 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); struct ptp_clock_info *ops = ptp->info; struct ptp_clock_time *pct; - struct timespec ts; + struct timespec64 ts; + struct timespec t2; int enable, err = 0; unsigned int i, pin_index; @@ -197,16 +198,21 @@ long ptp_ioctl(struct posix_clock *pc, unsigned int cmd, unsigned long arg) } pct = &sysoff->ts[0]; for (i = 0; i < sysoff->n_samples; i++) { - getnstimeofday(&ts); + getnstimeofday64(&ts); pct->sec = ts.tv_sec; pct->nsec = ts.tv_nsec; pct++; - ptp->info->gettime(ptp->info, &ts); + if (ptp->info->gettime64) { + ptp->info->gettime64(ptp->info, &ts); + } else { + ptp->info->gettime(ptp->info, &t2); + ts = timespec_to_timespec64(t2); + } pct->sec = ts.tv_sec; pct->nsec = ts.tv_nsec; pct++; } - getnstimeofday(&ts); + getnstimeofday64(&ts); pct->sec = ts.tv_sec; pct->nsec = ts.tv_nsec; if (copy_to_user((void __user *)arg, sysoff, sizeof(*sysoff))) |