time: Introduce do_sys_settimeofday64()
The do_sys_settimeofday() function uses a timespec, which is not year 2038 safe on 32bit systems. Thus this patch introduces do_sys_settimeofday64(), which allows us to transition users of do_sys_settimeofday() to using 64bit time types. Cc: Prarit Bhargava <prarit@redhat.com> Cc: Richard Cochran <richardcochran@gmail.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@kernel.org> Signed-off-by: Baolin Wang <baolin.wang@linaro.org> [jstultz: Include errno-base.h to avoid build issue on some arches] Signed-off-by: John Stultz <john.stultz@linaro.org>
This commit is contained in:
parent
457db29bfc
commit
86d3473224
|
@ -1,6 +1,8 @@
|
|||
#ifndef _LINUX_TIMEKEEPING_H
|
||||
#define _LINUX_TIMEKEEPING_H
|
||||
|
||||
#include <asm-generic/errno-base.h>
|
||||
|
||||
/* Included from linux/ktime.h */
|
||||
|
||||
void timekeeping_init(void);
|
||||
|
@ -11,8 +13,19 @@ extern int timekeeping_suspended;
|
|||
*/
|
||||
extern void do_gettimeofday(struct timeval *tv);
|
||||
extern int do_settimeofday64(const struct timespec64 *ts);
|
||||
extern int do_sys_settimeofday(const struct timespec *tv,
|
||||
const struct timezone *tz);
|
||||
extern int do_sys_settimeofday64(const struct timespec64 *tv,
|
||||
const struct timezone *tz);
|
||||
static inline int do_sys_settimeofday(const struct timespec *tv,
|
||||
const struct timezone *tz)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
|
||||
if (!tv)
|
||||
return -EINVAL;
|
||||
|
||||
ts64 = timespec_to_timespec64(*tv);
|
||||
return do_sys_settimeofday64(&ts64, tz);
|
||||
}
|
||||
|
||||
/*
|
||||
* Kernel time accessors
|
||||
|
|
|
@ -160,15 +160,15 @@ static inline void warp_clock(void)
|
|||
* various programs will get confused when the clock gets warped.
|
||||
*/
|
||||
|
||||
int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
|
||||
int do_sys_settimeofday64(const struct timespec64 *tv, const struct timezone *tz)
|
||||
{
|
||||
static int firsttime = 1;
|
||||
int error = 0;
|
||||
|
||||
if (tv && !timespec_valid(tv))
|
||||
if (tv && !timespec64_valid(tv))
|
||||
return -EINVAL;
|
||||
|
||||
error = security_settime(tv, tz);
|
||||
error = security_settime64(tv, tz);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
|
@ -186,7 +186,7 @@ int do_sys_settimeofday(const struct timespec *tv, const struct timezone *tz)
|
|||
}
|
||||
}
|
||||
if (tv)
|
||||
return do_settimeofday(tv);
|
||||
return do_settimeofday64(tv);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue