forked from mirrors/linux
		
	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: Thomas 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.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
							parent
							
								
									f2d6fdbfd2
								
							
						
					
					
						commit
						d6c7270e91
					
				
					 2 changed files with 17 additions and 56 deletions
				
			
		|  | @ -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); | ||||||
| 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) | ||||||
| 	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) | ||||||
| 	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) | ||||||
| 
 | 
 | ||||||
| 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 */ | ||||||
|  | static inline u64 ktime_get_boot_fast_ns(void) | ||||||
|  | { | ||||||
|  | 	return ktime_get_mono_fast_ns(); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /*
 | /*
 | ||||||
|  * timespec64 interfaces utilizing the ktime based ones |  * timespec64 interfaces utilizing the ktime based ones | ||||||
|  */ |  */ | ||||||
| static inline void get_monotonic_boottime64(struct timespec64 *ts) |  | ||||||
| { |  | ||||||
| 	*ts = ktime_to_timespec64(ktime_get_boottime()); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| 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) | ||||||
| } | } | ||||||
| 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); | ||||||
| 
 | 
 | ||||||
| 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, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Thomas Gleixner
						Thomas Gleixner