time: Change k_clock clock_set() to use timespec64
authorDeepa Dinamani <deepa.kernel@gmail.com>
Sun, 26 Mar 2017 19:04:16 +0000 (12:04 -0700)
committerThomas Gleixner <tglx@linutronix.de>
Fri, 14 Apr 2017 19:49:56 +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.

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-6-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/posix-clock.c
kernel/time/posix-cpu-timers.c
kernel/time/posix-timers.c

index 79d8ada..ba1b892 100644 (file)
@@ -489,7 +489,7 @@ static int sgi_clock_get(clockid_t clockid, struct timespec64 *tp)
        return 0;
 };
 
-static int sgi_clock_set(const clockid_t clockid, const struct timespec *tp)
+static int sgi_clock_set(const clockid_t clockid, const struct timespec64 *tp)
 {
 
        u64 nsec;
index dd05b49..7825e24 100644 (file)
@@ -89,7 +89,7 @@ struct k_itimer {
 struct k_clock {
        int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp);
        int (*clock_set) (const clockid_t which_clock,
-                         const struct timespec *tp);
+                         const struct timespec64 *tp);
        int (*clock_get) (const clockid_t which_clock, struct timespec64 *tp);
        int (*clock_adj) (const clockid_t which_clock, struct timex *tx);
        int (*timer_create) (struct k_itimer *timer);
index af91031..3807a34 100644 (file)
@@ -335,9 +335,8 @@ static int pc_clock_getres(clockid_t id, struct timespec64 *ts)
        return err;
 }
 
-static int pc_clock_settime(clockid_t id, const struct timespec *ts)
+static int pc_clock_settime(clockid_t id, const struct timespec64 *ts)
 {
-       struct timespec64 ts64 = timespec_to_timespec64(*ts);
        struct posix_clock_desc cd;
        int err;
 
@@ -351,7 +350,7 @@ static int pc_clock_settime(clockid_t id, const struct timespec *ts)
        }
 
        if (cd.clk->ops.clock_settime)
-               err = cd.clk->ops.clock_settime(cd.clk, &ts64);
+               err = cd.clk->ops.clock_settime(cd.clk, ts);
        else
                err = -EOPNOTSUPP;
 out:
index 37ce9ed..2cd4428 100644 (file)
@@ -135,7 +135,7 @@ posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
 }
 
 static int
-posix_cpu_clock_set(const clockid_t which_clock, const struct timespec *tp)
+posix_cpu_clock_set(const clockid_t which_clock, const struct timespec64 *tp)
 {
        /*
         * You can never reset a CPU clock, but we check for other errors
index f67dae9..7742da8 100644 (file)
@@ -212,12 +212,9 @@ static int posix_clock_realtime_get(clockid_t which_clock, struct timespec64 *tp
 
 /* Set clock_realtime */
 static int posix_clock_realtime_set(const clockid_t which_clock,
-                                   const struct timespec *tp)
+                                   const struct timespec64 *tp)
 {
-       struct timespec64 tp64;
-
-       tp64 = timespec_to_timespec64(*tp);
-       return do_sys_settimeofday64(&tp64, NULL);
+       return do_sys_settimeofday64(tp, NULL);
 }
 
 static int posix_clock_realtime_adj(const clockid_t which_clock,
@@ -1017,6 +1014,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
                const struct timespec __user *, tp)
 {
        struct k_clock *kc = clockid_to_kclock(which_clock);
+       struct timespec64 new_tp64;
        struct timespec new_tp;
 
        if (!kc || !kc->clock_set)
@@ -1024,8 +1022,9 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
 
        if (copy_from_user(&new_tp, tp, sizeof (*tp)))
                return -EFAULT;
+       new_tp64 = timespec_to_timespec64(new_tp);
 
-       return kc->clock_set(which_clock, &new_tp);
+       return kc->clock_set(which_clock, &new_tp64);
 }
 
 SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,