From: tip-bot for Martin Schwidefsky <schwidefsky@de.ibm.com>
To: linux-tip-commits@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, hpa@zytor.com, mingo@redhat.com,
johnstul@us.ibm.com, schwidefsky@de.ibm.com, dwalker@fifo99.com,
tglx@linutronix.de, mingo@elte.hu
Subject: [tip:timers/core] timekeeping: Introduce read_boot_clock
Date: Sat, 15 Aug 2009 09:04:33 GMT [thread overview]
Message-ID: <tip-23970e389e9cee43c4b41023935e1417271708b2@git.kernel.org> (raw)
In-Reply-To: <20090814134811.296703241@de.ibm.com>
Commit-ID: 23970e389e9cee43c4b41023935e1417271708b2
Gitweb: http://git.kernel.org/tip/23970e389e9cee43c4b41023935e1417271708b2
Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
AuthorDate: Fri, 14 Aug 2009 15:47:32 +0200
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Sat, 15 Aug 2009 10:55:47 +0200
timekeeping: Introduce read_boot_clock
Add the new function read_boot_clock to get the exact time the system
has been started. For architectures without support for exact boot
time a new weak function is added that returns 0. Use the exact boot
time to initialize wall_to_monotonic, or xtime if the read_boot_clock
returned 0.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>
Acked-by: John Stultz <johnstul@us.ibm.com>
Cc: Daniel Walker <dwalker@fifo99.com>
LKML-Reference: <20090814134811.296703241@de.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/s390/kernel/time.c | 17 +++++------------
include/linux/time.h | 1 +
kernel/time/timekeeping.c | 24 ++++++++++++++++++++++--
3 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index a94ec48..6bff1a1 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -187,6 +187,11 @@ void read_persistent_clock(struct timespec *ts)
tod_to_timeval(get_clock() - TOD_UNIX_EPOCH, ts);
}
+void read_boot_clock(struct timespec *ts)
+{
+ tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, ts);
+}
+
static cycle_t read_tod_clock(struct clocksource *cs)
{
return get_clock();
@@ -243,9 +248,6 @@ void update_vsyscall_tz(void)
*/
void __init time_init(void)
{
- struct timespec ts;
- unsigned long flags;
-
/* Reset time synchronization interfaces. */
etr_reset();
stp_reset();
@@ -261,15 +263,6 @@ void __init time_init(void)
if (clocksource_register(&clocksource_tod) != 0)
panic("Could not register TOD clock source");
- /*
- * Reset wall_to_monotonic to the initial timestamp created
- * in head.S to get a precise value in /proc/uptime.
- */
- write_seqlock_irqsave(&xtime_lock, flags);
- tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, &ts);
- set_normalized_timespec(&wall_to_monotonic, -ts.tv_sec, -ts.tv_nsec);
- write_sequnlock_irqrestore(&xtime_lock, flags);
-
/* Enable TOD clock interrupts on the boot cpu. */
init_cpu_timer();
diff --git a/include/linux/time.h b/include/linux/time.h
index 53a3216..f505988 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -102,6 +102,7 @@ extern struct timespec wall_to_monotonic;
extern seqlock_t xtime_lock;
extern void read_persistent_clock(struct timespec *ts);
+extern void read_boot_clock(struct timespec *ts);
extern int update_persistent_clock(struct timespec now);
extern int no_sync_cmos_clock __read_mostly;
void timekeeping_init(void);
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index f1a21ce..15e06de 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -501,6 +501,21 @@ void __attribute__((weak)) read_persistent_clock(struct timespec *ts)
ts->tv_nsec = 0;
}
+/**
+ * read_boot_clock - Return time of the system start.
+ *
+ * Weak dummy function for arches that do not yet support it.
+ * Function to read the exact time the system has been started.
+ * Returns a timespec with tv_sec=0 and tv_nsec=0 if unsupported.
+ *
+ * XXX - Do be sure to remove it once all arches implement it.
+ */
+void __attribute__((weak)) read_boot_clock(struct timespec *ts)
+{
+ ts->tv_sec = 0;
+ ts->tv_nsec = 0;
+}
+
/*
* timekeeping_init - Initializes the clocksource and common timekeeping values
*/
@@ -508,9 +523,10 @@ void __init timekeeping_init(void)
{
struct clocksource *clock;
unsigned long flags;
- struct timespec now;
+ struct timespec now, boot;
read_persistent_clock(&now);
+ read_boot_clock(&boot);
write_seqlock_irqsave(&xtime_lock, flags);
@@ -525,8 +541,12 @@ void __init timekeeping_init(void)
xtime.tv_nsec = now.tv_nsec;
raw_time.tv_sec = 0;
raw_time.tv_nsec = 0;
+ if (boot.tv_sec == 0 && boot.tv_nsec == 0) {
+ boot.tv_sec = xtime.tv_sec;
+ boot.tv_nsec = xtime.tv_nsec;
+ }
set_normalized_timespec(&wall_to_monotonic,
- -xtime.tv_sec, -xtime.tv_nsec);
+ -boot.tv_sec, -boot.tv_nsec);
update_xtime_cache(0);
total_sleep_time.tv_sec = 0;
total_sleep_time.tv_nsec = 0;
next prev parent reply other threads:[~2009-08-15 9:05 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-08-14 13:47 [patch 00/15] clocksource / timekeeping rework V4 (resend V3 + bug fix) Martin Schwidefsky
2009-08-14 13:47 ` [patch 01/15] introduce timekeeping_leap_insert Martin Schwidefsky
2009-08-15 9:01 ` [tip:timers/core] timekeeping: Introduce timekeeping_leap_insert tip-bot for John Stultz
2009-08-14 13:47 ` [patch 02/15] remove clocksource inline functions Martin Schwidefsky
2009-08-15 9:01 ` [tip:timers/core] timekeeping: Remove " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 03/15] reset of cycle_last for tsc clocksource Martin Schwidefsky
2009-08-15 9:01 ` [tip:timers/core] timekeeping: Move reset of cycle_last for tsc clocksource to tsc tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 04/15] cleanup clocksource selection Martin Schwidefsky
2009-08-15 1:42 ` john stultz
2009-08-15 1:43 ` john stultz
2009-08-17 7:34 ` Martin Schwidefsky
2009-08-15 9:02 ` [tip:timers/core] clocksource: Cleanup " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 05/15] clocksource watchdog highres enablement Martin Schwidefsky
2009-08-15 9:02 ` [tip:timers/core] clocksource: Delay " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 06/15] clocksource watchdog resume logic Martin Schwidefsky
2009-08-15 9:02 ` [tip:timers/core] clocksource: Simplify " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 07/15] clocksource watchdog refactoring Martin Schwidefsky
2009-08-15 9:02 ` [tip:timers/core] clocksource: Refactor clocksource watchdog tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 08/15] clocksource watchdog work Martin Schwidefsky
2009-08-15 9:03 ` [tip:timers/core] clocksource: Move watchdog downgrade to a work queue thread tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 09/15] introduce struct timekeeper Martin Schwidefsky
2009-08-15 9:03 ` [tip:timers/core] timekeeping: Introduce " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 10/15] add xtime_shift and ntp_error_shift to " Martin Schwidefsky
2009-08-15 9:03 ` [tip:timers/core] timekeeping: Add " tip-bot for Martin Schwidefsky
2009-08-15 9:04 ` [patch 10/15] add " Thomas Gleixner
2009-08-14 13:47 ` [patch 11/15] move NTP adjusted clock multiplier " Martin Schwidefsky
2009-08-15 9:03 ` [tip:timers/core] timekeeping: Move " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 12/15] timekeeper read clock helper functions Martin Schwidefsky
2009-08-15 9:03 ` [tip:timers/core] timekeeping: Add timekeeper read_clock " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 13/15] update clocksource with stop_machine Martin Schwidefsky
2009-08-15 9:04 ` [tip:timers/core] timekeeping: Update " tip-bot for Martin Schwidefsky
2009-08-14 13:47 ` [patch 14/15] read_persistent_clock should return a timespec Martin Schwidefsky
2009-08-15 9:04 ` [tip:timers/core] timekeeping: Increase granularity of read_persistent_clock() tip-bot for Martin Schwidefsky
2009-08-22 10:32 ` Ingo Molnar
2009-08-22 15:15 ` Martin Schwidefsky
2009-08-22 15:33 ` Ingo Molnar
2009-08-22 20:23 ` Martin Schwidefsky
2009-08-23 8:53 ` Ingo Molnar
2009-08-23 9:03 ` [tip:timers/core] timekeeping: Increase granularity of read_persistent_clock(), build fix tip-bot for Martin Schwidefsky
2009-08-23 3:33 ` [tip:timers/core] timekeeping: Increase granularity of read_persistent_clock() Paul Mackerras
2009-08-23 8:47 ` Ingo Molnar
2009-08-24 3:20 ` Paul Mackerras
2009-08-24 8:23 ` Ingo Molnar
2009-08-25 3:49 ` Paul Mackerras
2009-08-25 8:26 ` Ingo Molnar
2009-08-25 9:57 ` Paul Mackerras
2009-08-25 10:17 ` Ingo Molnar
2009-08-25 11:33 ` Paul Mackerras
2009-08-25 13:50 ` Ingo Molnar
2009-08-25 21:33 ` Theodore Tso
2009-08-25 22:03 ` Ingo Molnar
2009-08-26 0:26 ` Paul Mackerras
2009-08-26 0:22 ` Paul Mackerras
2009-08-25 23:48 ` Paul Mackerras
2009-08-26 9:44 ` Benjamin Herrenschmidt
2009-08-14 13:47 ` [patch 15/15] introduce read_boot_clock Martin Schwidefsky
2009-08-15 9:04 ` tip-bot for Martin Schwidefsky [this message]
2009-08-14 14:08 ` [patch 00/15] clocksource / timekeeping rework V4 (resend V3 + bug fix) Thomas Gleixner
2009-08-14 14:22 ` Martin Schwidefsky
2009-08-14 22:56 ` john stultz
2009-08-15 1:46 ` john stultz
2009-08-15 9:01 ` Thomas Gleixner
2009-08-15 9:52 ` Ingo Molnar
2009-08-15 10:08 ` Thomas Gleixner
2009-08-17 7:40 ` Martin Schwidefsky
2009-08-17 8:45 ` Thomas Gleixner
2009-08-17 9:28 ` [circular locking bug] " Ingo Molnar
2009-08-17 17:53 ` Martin Schwidefsky
2009-08-18 15:09 ` Martin Schwidefsky
2009-08-19 10:06 ` [tip:timers/core] clocksource: Avoid clocksource watchdog circular locking dependency tip-bot for Martin Schwidefsky
2009-08-19 20:25 ` [circular locking bug] Re: [patch 00/15] clocksource / timekeeping rework V4 (resend V3 + bug fix) Ingo Molnar
2009-08-20 9:28 ` Martin Schwidefsky
2009-08-20 9:58 ` Ingo Molnar
2009-08-20 10:35 ` Martin Schwidefsky
2009-08-20 16:14 ` Thomas Gleixner
2009-08-20 16:53 ` Martin Schwidefsky
2009-08-20 19:08 ` Thomas Gleixner
2009-08-19 9:46 ` [tip:timers/core] clocksource: Protect the watchdog rating changes with clocksource_mutex tip-bot for Thomas Gleixner
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=tip-23970e389e9cee43c4b41023935e1417271708b2@git.kernel.org \
--to=schwidefsky@de.ibm.com \
--cc=dwalker@fifo99.com \
--cc=hpa@zytor.com \
--cc=johnstul@us.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=mingo@redhat.com \
--cc=tglx@linutronix.de \
/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
Powered by JetHome