From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752595AbbDCIQx (ORCPT ); Fri, 3 Apr 2015 04:16:53 -0400 Received: from [198.137.202.10] ([198.137.202.10]:44570 "EHLO terminus.zytor.com" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1752505AbbDCIQr (ORCPT ); Fri, 3 Apr 2015 04:16:47 -0400 Date: Fri, 3 Apr 2015 01:15:37 -0700 From: tip-bot for Xunlei Pang Message-ID: Cc: linux-kernel@vger.kernel.org, tglx@linutronix.de, pang.xunlei@linaro.org, arnd@arndb.de, hpa@zytor.com, john.stultz@linaro.org, mingo@kernel.org, peterz@infradead.org Reply-To: pang.xunlei@linaro.org, tglx@linutronix.de, linux-kernel@vger.kernel.org, hpa@zytor.com, arnd@arndb.de, mingo@kernel.org, john.stultz@linaro.org, peterz@infradead.org In-Reply-To: <1427945681-29972-2-git-send-email-john.stultz@linaro.org> References: <1427945681-29972-2-git-send-email-john.stultz@linaro.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:timers/core] time: Add y2038 safe read_boot_clock64() Git-Commit-ID: 9a806ddbb9a18c510e4acdcc828b9a87f5fd3aef X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 9a806ddbb9a18c510e4acdcc828b9a87f5fd3aef Gitweb: http://git.kernel.org/tip/9a806ddbb9a18c510e4acdcc828b9a87f5fd3aef Author: Xunlei Pang AuthorDate: Wed, 1 Apr 2015 20:34:21 -0700 Committer: Ingo Molnar CommitDate: Fri, 3 Apr 2015 08:18:18 +0200 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 Signed-off-by: Xunlei Pang Signed-off-by: John Stultz Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/1427945681-29972-2-git-send-email-john.stultz@linaro.org Signed-off-by: Ingo Molnar --- include/linux/timekeeping.h | 1 + kernel/time/timekeeping.c | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h index 5047b83..18d27a3 100644 --- a/include/linux/timekeeping.h +++ b/include/linux/timekeeping.h @@ -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); diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 5b12292..652e50a 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -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");