提交 0fe6afe3 编写于 作者: D Deepa Dinamani 提交者: Thomas Gleixner

time: Change k_clock clock_set() to use timespec64

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: NDeepa 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.comSigned-off-by: NThomas Gleixner <tglx@linutronix.de>
上级 d2e3e0ca
...@@ -489,7 +489,7 @@ static int sgi_clock_get(clockid_t clockid, struct timespec64 *tp) ...@@ -489,7 +489,7 @@ static int sgi_clock_get(clockid_t clockid, struct timespec64 *tp)
return 0; 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; u64 nsec;
......
...@@ -89,7 +89,7 @@ struct k_itimer { ...@@ -89,7 +89,7 @@ struct k_itimer {
struct k_clock { struct k_clock {
int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp); int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp);
int (*clock_set) (const clockid_t which_clock, 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_get) (const clockid_t which_clock, struct timespec64 *tp);
int (*clock_adj) (const clockid_t which_clock, struct timex *tx); int (*clock_adj) (const clockid_t which_clock, struct timex *tx);
int (*timer_create) (struct k_itimer *timer); int (*timer_create) (struct k_itimer *timer);
......
...@@ -335,9 +335,8 @@ static int pc_clock_getres(clockid_t id, struct timespec64 *ts) ...@@ -335,9 +335,8 @@ static int pc_clock_getres(clockid_t id, struct timespec64 *ts)
return err; 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; struct posix_clock_desc cd;
int err; int err;
...@@ -351,7 +350,7 @@ static int pc_clock_settime(clockid_t id, const struct timespec *ts) ...@@ -351,7 +350,7 @@ static int pc_clock_settime(clockid_t id, const struct timespec *ts)
} }
if (cd.clk->ops.clock_settime) 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 else
err = -EOPNOTSUPP; err = -EOPNOTSUPP;
out: out:
......
...@@ -135,7 +135,7 @@ posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp) ...@@ -135,7 +135,7 @@ posix_cpu_clock_getres(const clockid_t which_clock, struct timespec64 *tp)
} }
static int 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 * You can never reset a CPU clock, but we check for other errors
......
...@@ -212,12 +212,9 @@ static int posix_clock_realtime_get(clockid_t which_clock, struct timespec64 *tp ...@@ -212,12 +212,9 @@ static int posix_clock_realtime_get(clockid_t which_clock, struct timespec64 *tp
/* Set clock_realtime */ /* Set clock_realtime */
static int posix_clock_realtime_set(const clockid_t which_clock, static int posix_clock_realtime_set(const clockid_t which_clock,
const struct timespec *tp) const struct timespec64 *tp)
{ {
struct timespec64 tp64; return do_sys_settimeofday64(tp, NULL);
tp64 = timespec_to_timespec64(*tp);
return do_sys_settimeofday64(&tp64, NULL);
} }
static int posix_clock_realtime_adj(const clockid_t which_clock, static int posix_clock_realtime_adj(const clockid_t which_clock,
...@@ -1017,6 +1014,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, ...@@ -1017,6 +1014,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
const struct timespec __user *, tp) const struct timespec __user *, tp)
{ {
struct k_clock *kc = clockid_to_kclock(which_clock); struct k_clock *kc = clockid_to_kclock(which_clock);
struct timespec64 new_tp64;
struct timespec new_tp; struct timespec new_tp;
if (!kc || !kc->clock_set) if (!kc || !kc->clock_set)
...@@ -1024,8 +1022,9 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, ...@@ -1024,8 +1022,9 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
if (copy_from_user(&new_tp, tp, sizeof (*tp))) if (copy_from_user(&new_tp, tp, sizeof (*tp)))
return -EFAULT; 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, SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册