From: Pavel Tatashin <pasha.tatashin@oracle.com>
To: steven.sistare@oracle.com, daniel.m.jordan@oracle.com,
linux@armlinux.org.uk, schwidefsky@de.ibm.com,
heiko.carstens@de.ibm.com, john.stultz@linaro.org,
sboyd@codeaurora.org, x86@kernel.org,
linux-kernel@vger.kernel.org, mingo@redhat.com,
tglx@linutronix.de, hpa@zytor.com, douly.fnst@cn.fujitsu.com
Subject: [PATCH v7 2/6] time: sync read_boot_clock64() with persistent clock
Date: Thu, 2 Nov 2017 13:26:40 -0400 [thread overview]
Message-ID: <20171102172644.28555-3-pasha.tatashin@oracle.com> (raw)
In-Reply-To: <20171102172644.28555-1-pasha.tatashin@oracle.com>
read_boot_clock64() returns a boot start timestamp from epoch. Some arches
may need to access the persistent clock interface in order to calculate the
epoch offset. However, the resolution of the persistent clock might be low.
Therefore, in order to avoid time discrepancies a new argument 'now' is
added to read_boot_clock64() parameters. Arch may decide to use it instead
of accessing persistent clock again.
Also, change read_boot_clock64() to have __init prototype since it is
accessed only during boot.
Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
---
arch/arm/kernel/time.c | 2 +-
arch/s390/kernel/time.c | 2 +-
include/linux/timekeeping.h | 10 +++++-----
kernel/time/timekeeping.c | 8 ++++++--
4 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
index 629f8e9981f1..5b259261a268 100644
--- a/arch/arm/kernel/time.c
+++ b/arch/arm/kernel/time.c
@@ -90,7 +90,7 @@ void read_persistent_clock64(struct timespec64 *ts)
__read_persistent_clock(ts);
}
-void read_boot_clock64(struct timespec64 *ts)
+void __init read_boot_clock64(struct timespec64 *now, struct timespec64 *ts)
{
__read_boot_clock(ts);
}
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 5cbd52169348..780b770e6a89 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -220,7 +220,7 @@ void read_persistent_clock64(struct timespec64 *ts)
ext_to_timespec64(clk, ts);
}
-void read_boot_clock64(struct timespec64 *ts)
+void __init read_boot_clock64(struct timespec64 *now, struct timespec64 *ts)
{
unsigned char clk[STORE_CLOCK_EXT_SIZE];
__u64 delta;
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h
index ddc229ff6d1e..ffe5705bd064 100644
--- a/include/linux/timekeeping.h
+++ b/include/linux/timekeeping.h
@@ -340,11 +340,11 @@ extern void ktime_get_snapshot(struct system_time_snapshot *systime_snapshot);
*/
extern int persistent_clock_is_local;
-extern void read_persistent_clock(struct timespec *ts);
-extern void read_persistent_clock64(struct timespec64 *ts);
-extern void read_boot_clock64(struct timespec64 *ts);
-extern int update_persistent_clock(struct timespec now);
-extern int update_persistent_clock64(struct timespec64 now);
+void read_persistent_clock(struct timespec *ts);
+void read_persistent_clock64(struct timespec64 *ts);
+void read_boot_clock64(struct timespec64 *now, struct timespec64 *ts);
+int update_persistent_clock(struct timespec now);
+int update_persistent_clock64(struct timespec64 now);
#endif
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index 2cafb49aa65e..fc6220a89fcc 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -1466,9 +1466,13 @@ void __weak read_persistent_clock64(struct timespec64 *ts64)
* Function to read the exact time the system has been started.
* Returns a timespec64 with tv_sec=0 and tv_nsec=0 if unsupported.
*
+ * Argument 'now' contains time from persistent clock to calculate offset from
+ * epoch. May contain zeros if persist ant clock is not available.
+ *
* XXX - Do be sure to remove it once all arches implement it.
*/
-void __weak read_boot_clock64(struct timespec64 *ts)
+void __weak __init read_boot_clock64(struct timespec64 *now,
+ struct timespec64 *ts)
{
ts->tv_sec = 0;
ts->tv_nsec = 0;
@@ -1499,7 +1503,7 @@ void __init timekeeping_init(void)
} else if (now.tv_sec || now.tv_nsec)
persistent_clock_exists = true;
- read_boot_clock64(&boot);
+ read_boot_clock64(&now, &boot);
if (!timespec64_valid_strict(&boot)) {
pr_warn("WARNING: Boot clock returned invalid value!\n"
" Check your CMOS/BIOS settings.\n");
--
2.15.0
next prev parent reply other threads:[~2017-11-02 17:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-02 17:26 [PATCH v7 0/6] Early boot time stamps for x86 Pavel Tatashin
2017-11-02 17:26 ` [PATCH v7 1/6] x86/tsc: remove tsc_disabled flag Pavel Tatashin
2017-11-03 1:58 ` Dou Liyang
2017-11-03 14:23 ` Pavel Tatashin
2017-11-08 8:52 ` Dou Liyang
2017-11-08 17:23 ` Pavel Tatashin
2017-11-02 17:26 ` Pavel Tatashin [this message]
2017-11-02 17:26 ` [PATCH v7 3/6] x86/time: read_boot_clock64() implementation Pavel Tatashin
2017-11-02 17:26 ` [PATCH v7 4/6] sched: early boot clock Pavel Tatashin
2017-11-02 17:26 ` [PATCH v7 5/6] x86/paravirt: add active_sched_clock to pv_time_ops Pavel Tatashin
2017-11-02 17:26 ` [PATCH v7 6/6] x86/tsc: use tsc early Pavel Tatashin
2017-11-03 2:54 ` Dou Liyang
2017-11-03 14:30 ` Pavel Tatashin
2017-11-08 9:17 ` Dou Liyang
2017-11-08 17:24 ` Pavel Tatashin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171102172644.28555-3-pasha.tatashin@oracle.com \
--to=pasha.tatashin@oracle.com \
--cc=daniel.m.jordan@oracle.com \
--cc=douly.fnst@cn.fujitsu.com \
--cc=heiko.carstens@de.ibm.com \
--cc=hpa@zytor.com \
--cc=john.stultz@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mingo@redhat.com \
--cc=sboyd@codeaurora.org \
--cc=schwidefsky@de.ibm.com \
--cc=steven.sistare@oracle.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®