]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
time: Change k_clock clock_getres() to use timespec64
authorDeepa Dinamani <deepa.kernel@gmail.com>
Sun, 26 Mar 2017 19:04:15 +0000 (12:04 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 14 Apr 2017 19:49:55 +0000 (21:49 +0200)
struct timespec is not y2038 safe on 32 bit machines.  Replace uses of
struct timespec with struct timespec64 in the kernel. The syscall
interfaces themselves will be changed in a separate series.

The clock_getres() interface has also been changed to use timespec64 even
though this particular interface is not affected by the y2038 problem. This
helps verification for internal kernel code for y2038 readiness by getting
rid of time_t/ timeval/ timespec completely.

Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: y2038@lists.linaro.org
Cc: john.stultz@linaro.org
Cc: arnd@arndb.de
Link: http://lkml.kernel.org/r/1490555058-4603-5-git-send-email-deepa.kernel@gmail.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
drivers/char/mmtimer.c
include/linux/posix-timers.h
kernel/time/alarmtimer.c
kernel/time/posix-clock.c
kernel/time/posix-cpu-timers.c
kernel/time/posix-timers.c

index 40d880b8c02f0f74affdbbd3117827df64396968..79d8ada08a8088d712a8c92e600756d6be4599e0 100644 (file)
@@ -765,7 +765,7 @@ static int sgi_timer_set(struct k_itimer *timr, int flags,
        return err;
 }
 
-static int sgi_clock_getres(const clockid_t which_clock, struct timespec *tp)
+static int sgi_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
 {
        tp->tv_sec = 0;
        tp->tv_nsec = sgi_clock_period;
index 0688f3975da70d2ab89c62a60347521318014eda..dd05b49074f3ee4c85636e78e961dda8030e06e2 100644 (file)
@@ -87,7 +87,7 @@ struct k_itimer {
 };
 
 struct k_clock {
-       int (*clock_getres) (const clockid_t which_clock, struct timespec *tp);
+       int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp);
        int (*clock_set) (const clockid_t which_clock,
                          const struct timespec *tp);
        int (*clock_get) (const clockid_t which_clock, struct timespec64 *tp);
index 944ca6e6f1c22f213626e860408277e65a360dda..e8a45e2c3d953d2a3607efdd07096512a2b65c12 100644 (file)
@@ -541,7 +541,7 @@ static enum alarmtimer_restart alarm_handle_timer(struct alarm *alarm,
  *
  * Returns the granularity of underlying alarm base clock
  */
-static int alarm_clock_getres(const clockid_t which_clock, struct timespec *tp)
+static int alarm_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
 {
        if (!alarmtimer_get_rtcdev())
                return -EINVAL;
index fab6bd33155e976b70c2c10b6b47ba68340010df..af91031f64de615fe80fed0087390ad2b9fe3c37 100644 (file)
@@ -316,20 +316,17 @@ static int pc_clock_gettime(clockid_t id, struct timespec64 *ts)
        return err;
 }
 
-static int pc_clock_getres(clockid_t id, struct timespec *ts)
+static int pc_clock_getres(clockid_t id, struct timespec64 *ts)
 {
        struct posix_clock_desc cd;
-       struct timespec64 ts64;
        int err;
 
        err = get_clock_desc(id, &cd);
        if (err)
                return err;
 
-       if (cd.clk->ops.clock_getres) {
-               err = cd.clk->ops.clock_getres(cd.clk, &ts64);
-               *ts = timespec64_to_timespec(ts64);
-       }
+       if (cd.clk->ops.clock_getres)
+               err = cd.clk->ops.clock_getres(cd.clk, ts);
        else
                err = -EOPNOTSUPP;
 
index 082231cc7953216b635a94f312a571c56fef9d46..37ce9edfb968f6d04d193724780473deb16dddbb 100644 (file)
@@ -116,7 +116,7 @@ static inline u64 virt_ticks(struct task_struct *p)
 }
 
 static int
-posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *tp)
+posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
 {
        int error = check_clock(which_clock);
        if (!error) {
@@ -1369,7 +1369,7 @@ static long posix_cpu_nsleep_restart(struct restart_block *restart_block)
 #define THREAD_CLOCK   MAKE_THREAD_CPUCLOCK(0, CPUCLOCK_SCHED)
 
 static int process_cpu_clock_getres(const clockid_t which_clock,
-                                   struct timespec *tp)
+                                   struct timespec64 *tp)
 {
        return posix_cpu_clock_getres(PROCESS_CLOCK, tp);
 }
@@ -1394,7 +1394,7 @@ static long process_cpu_nsleep_restart(struct restart_block *restart_block)
        return -EINVAL;
 }
 static int thread_cpu_clock_getres(const clockid_t which_clock,
-                                  struct timespec *tp)
+                                  struct timespec64 *tp)
 {
        return posix_cpu_clock_getres(THREAD_CLOCK, tp);
 }
index 68170642c77ca1e46d96a2dcafcbf3a81d58f5c1..f67dae9f3bdf24babde5162f4cbf7fd1ba79f0cf 100644 (file)
@@ -258,9 +258,9 @@ static int posix_get_monotonic_coarse(clockid_t which_clock,
        return 0;
 }
 
-static int posix_get_coarse_res(const clockid_t which_clock, struct timespec *tp)
+static int posix_get_coarse_res(const clockid_t which_clock, struct timespec64 *tp)
 {
-       *tp = ktime_to_timespec(KTIME_LOW_RES);
+       *tp = ktime_to_timespec64(KTIME_LOW_RES);
        return 0;
 }
 
@@ -276,7 +276,7 @@ static int posix_get_tai(clockid_t which_clock, struct timespec64 *tp)
        return 0;
 }
 
-static int posix_get_hrtimer_res(clockid_t which_clock, struct timespec *tp)
+static int posix_get_hrtimer_res(clockid_t which_clock, struct timespec64 *tp)
 {
        tp->tv_sec = 0;
        tp->tv_nsec = hrtimer_resolution;
@@ -1075,13 +1075,15 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
                struct timespec __user *, tp)
 {
        struct k_clock *kc = clockid_to_kclock(which_clock);
+       struct timespec64 rtn_tp64;
        struct timespec rtn_tp;
        int error;
 
        if (!kc)
                return -EINVAL;
 
-       error = kc->clock_getres(which_clock, &rtn_tp);
+       error = kc->clock_getres(which_clock, &rtn_tp64);
+       rtn_tp = timespec64_to_timespec(rtn_tp64);
 
        if (!error && tp && copy_to_user(tp, &rtn_tp, sizeof (rtn_tp)))
                error = -EFAULT;