time: Add y2038 safe read_boot_clock64()
As part of addressing in-kernel y2038 issues, this patch adds read_boot_clock64() and replaces all the call sites of read_boot_clock() with this function. This is a __weak implementation, which simply calls the existing y2038 unsafe read_boot_clock(). This allows architecture specific implementations to be converted independently, and eventually the y2038 unsafe read_boot_clock() can be removed after all its architecture specific implementations have been converted to read_boot_clock64(). Suggested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Xunlei Pang <pang.xunlei@linaro.org> Signed-off-by: John Stultz <john.stultz@linaro.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1427945681-29972-2-git-send-email-john.stultz@linaro.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
3650b57fdf
commit
9a806ddbb9
|
@ -269,6 +269,7 @@ static inline bool has_persistent_clock(void)
|
|||
|
||||
extern void read_persistent_clock(struct timespec *ts);
|
||||
extern void read_boot_clock(struct timespec *ts);
|
||||
extern void read_boot_clock64(struct timespec64 *ts);
|
||||
extern int update_persistent_clock(struct timespec now);
|
||||
|
||||
|
||||
|
|
|
@ -1188,6 +1188,14 @@ void __weak read_boot_clock(struct timespec *ts)
|
|||
ts->tv_nsec = 0;
|
||||
}
|
||||
|
||||
void __weak read_boot_clock64(struct timespec64 *ts64)
|
||||
{
|
||||
struct timespec ts;
|
||||
|
||||
read_boot_clock(&ts);
|
||||
*ts64 = timespec_to_timespec64(ts);
|
||||
}
|
||||
|
||||
/*
|
||||
* timekeeping_init - Initializes the clocksource and common timekeeping values
|
||||
*/
|
||||
|
@ -1209,8 +1217,7 @@ void __init timekeeping_init(void)
|
|||
} else if (now.tv_sec || now.tv_nsec)
|
||||
persistent_clock_exist = true;
|
||||
|
||||
read_boot_clock(&ts);
|
||||
boot = timespec_to_timespec64(ts);
|
||||
read_boot_clock64(&boot);
|
||||
if (!timespec64_valid_strict(&boot)) {
|
||||
pr_warn("WARNING: Boot clock returned invalid value!\n"
|
||||
" Check your CMOS/BIOS settings.\n");
|
||||
|
|
Loading…
Reference in New Issue