Commit d6c7270e authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Ingo Molnar

timekeeping: Remove boot time specific code

Now that the MONOTONIC and BOOTTIME clocks are the same, remove all the
special handling from timekeeping. Keep wrappers for the existing users of
the *boot* timekeeper interfaces.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Kevin Easton <kevin@guarana.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mark Salyzyn <salyzyn@android.com>
Cc: Michael Kerrisk <mtk.manpages@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Prarit Bhargava <prarit@redhat.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Link: http://lkml.kernel.org/r/20180301165150.236279497@linutronix.deSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent f2d6fdbf
...@@ -40,13 +40,17 @@ extern void getboottime64(struct timespec64 *ts); ...@@ -40,13 +40,17 @@ extern void getboottime64(struct timespec64 *ts);
#define ktime_get_real_ts64(ts) getnstimeofday64(ts) #define ktime_get_real_ts64(ts) getnstimeofday64(ts)
/* Clock BOOTTIME compatibility wrappers */
static inline void get_monotonic_boottime64(struct timespec64 *ts)
{
ktime_get_ts64(ts);
}
/* /*
* ktime_t based interfaces * ktime_t based interfaces
*/ */
enum tk_offsets { enum tk_offsets {
TK_OFFS_REAL, TK_OFFS_REAL,
TK_OFFS_BOOT,
TK_OFFS_TAI, TK_OFFS_TAI,
TK_OFFS_MAX, TK_OFFS_MAX,
}; };
...@@ -57,6 +61,10 @@ extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs); ...@@ -57,6 +61,10 @@ extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs);
extern ktime_t ktime_get_raw(void); extern ktime_t ktime_get_raw(void);
extern u32 ktime_get_resolution_ns(void); extern u32 ktime_get_resolution_ns(void);
/* Clock BOOTTIME compatibility wrappers */
static inline ktime_t ktime_get_boottime(void) { return ktime_get(); }
static inline u64 ktime_get_boot_ns(void) { return ktime_get(); }
/** /**
* ktime_get_real - get the real (wall-) time in ktime_t format * ktime_get_real - get the real (wall-) time in ktime_t format
*/ */
...@@ -65,17 +73,6 @@ static inline ktime_t ktime_get_real(void) ...@@ -65,17 +73,6 @@ static inline ktime_t ktime_get_real(void)
return ktime_get_with_offset(TK_OFFS_REAL); return ktime_get_with_offset(TK_OFFS_REAL);
} }
/**
* ktime_get_boottime - Returns monotonic time since boot in ktime_t format
*
* This is similar to CLOCK_MONTONIC/ktime_get, but also includes the
* time spent in suspend.
*/
static inline ktime_t ktime_get_boottime(void)
{
return ktime_get_with_offset(TK_OFFS_BOOT);
}
/** /**
* ktime_get_clocktai - Returns the TAI time of day in ktime_t format * ktime_get_clocktai - Returns the TAI time of day in ktime_t format
*/ */
...@@ -102,11 +99,6 @@ static inline u64 ktime_get_real_ns(void) ...@@ -102,11 +99,6 @@ static inline u64 ktime_get_real_ns(void)
return ktime_to_ns(ktime_get_real()); return ktime_to_ns(ktime_get_real());
} }
static inline u64 ktime_get_boot_ns(void)
{
return ktime_to_ns(ktime_get_boottime());
}
static inline u64 ktime_get_tai_ns(void) static inline u64 ktime_get_tai_ns(void)
{ {
return ktime_to_ns(ktime_get_clocktai()); return ktime_to_ns(ktime_get_clocktai());
...@@ -119,17 +111,17 @@ static inline u64 ktime_get_raw_ns(void) ...@@ -119,17 +111,17 @@ static inline u64 ktime_get_raw_ns(void)
extern u64 ktime_get_mono_fast_ns(void); extern u64 ktime_get_mono_fast_ns(void);
extern u64 ktime_get_raw_fast_ns(void); extern u64 ktime_get_raw_fast_ns(void);
extern u64 ktime_get_boot_fast_ns(void);
extern u64 ktime_get_real_fast_ns(void); extern u64 ktime_get_real_fast_ns(void);
/* /* Clock BOOTTIME compatibility wrappers */
* timespec64 interfaces utilizing the ktime based ones static inline u64 ktime_get_boot_fast_ns(void)
*/
static inline void get_monotonic_boottime64(struct timespec64 *ts)
{ {
*ts = ktime_to_timespec64(ktime_get_boottime()); return ktime_get_mono_fast_ns();
} }
/*
* timespec64 interfaces utilizing the ktime based ones
*/
static inline void timekeeping_clocktai64(struct timespec64 *ts) static inline void timekeeping_clocktai64(struct timespec64 *ts)
{ {
*ts = ktime_to_timespec64(ktime_get_clocktai()); *ts = ktime_to_timespec64(ktime_get_clocktai());
......
...@@ -473,36 +473,6 @@ u64 ktime_get_raw_fast_ns(void) ...@@ -473,36 +473,6 @@ u64 ktime_get_raw_fast_ns(void)
} }
EXPORT_SYMBOL_GPL(ktime_get_raw_fast_ns); EXPORT_SYMBOL_GPL(ktime_get_raw_fast_ns);
/**
* ktime_get_boot_fast_ns - NMI safe and fast access to boot clock.
*
* To keep it NMI safe since we're accessing from tracing, we're not using a
* separate timekeeper with updates to monotonic clock and boot offset
* protected with seqlocks. This has the following minor side effects:
*
* (1) Its possible that a timestamp be taken after the boot offset is updated
* but before the timekeeper is updated. If this happens, the new boot offset
* is added to the old timekeeping making the clock appear to update slightly
* earlier:
* CPU 0 CPU 1
* timekeeping_inject_sleeptime64()
* __timekeeping_inject_sleeptime(tk, delta);
* timestamp();
* timekeeping_update(tk, TK_CLEAR_NTP...);
*
* (2) On 32-bit systems, the 64-bit boot offset (tk->offs_boot) may be
* partially updated. Since the tk->offs_boot update is a rare event, this
* should be a rare occurrence which postprocessing should be able to handle.
*/
u64 notrace ktime_get_boot_fast_ns(void)
{
struct timekeeper *tk = &tk_core.timekeeper;
return (ktime_get_mono_fast_ns() + ktime_to_ns(tk->offs_boot));
}
EXPORT_SYMBOL_GPL(ktime_get_boot_fast_ns);
/* /*
* See comment for __ktime_get_fast_ns() vs. timestamp ordering * See comment for __ktime_get_fast_ns() vs. timestamp ordering
*/ */
...@@ -794,7 +764,6 @@ EXPORT_SYMBOL_GPL(ktime_get_resolution_ns); ...@@ -794,7 +764,6 @@ EXPORT_SYMBOL_GPL(ktime_get_resolution_ns);
static ktime_t *offsets[TK_OFFS_MAX] = { static ktime_t *offsets[TK_OFFS_MAX] = {
[TK_OFFS_REAL] = &tk_core.timekeeper.offs_real, [TK_OFFS_REAL] = &tk_core.timekeeper.offs_real,
[TK_OFFS_BOOT] = &tk_core.timekeeper.offs_boot,
[TK_OFFS_TAI] = &tk_core.timekeeper.offs_tai, [TK_OFFS_TAI] = &tk_core.timekeeper.offs_tai,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment