summaryrefslogtreecommitdiffstats
path: root/drivers/ptp
diff options
context:
space:
mode:
authorRichard Cochran <richardcochran@gmail.com>2015-03-29 23:11:52 +0200
committerDavid S. Miller <davem@davemloft.net>2015-03-31 18:01:16 +0200
commite13cfcb03eeccb97d3f8deb393304c6190b61da9 (patch)
tree5d2270509d1297275040c55feb850a144dd31210 /drivers/ptp
parentptp: introduce get/set time methods with explicit 64 bit seconds. (diff)
downloadlinux-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.c14
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)))