diff options
author | Ingo Molnar <mingo@elte.hu> | 2008-04-07 14:58:08 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-07 15:09:14 -0400 |
commit | 5b13d863573e746739ccfc24ac1a9473cfee8df1 (patch) | |
tree | aa7f3536bf6f1c491a6051cf55b4ed71cd2a421c /arch/x86/kernel/tsc_32.c | |
parent | 4cac04dd63fa3b202ee313ed1afbbd135ab887ee (diff) |
revert "x86: tsc prevent time going backwards"
revert:
| commit 47001d603375f857a7fab0e9c095d964a1ea0039
| Author: Thomas Gleixner <tglx@linutronix.de>
| Date: Tue Apr 1 19:45:18 2008 +0200
|
| x86: tsc prevent time going backwards
it has been identified to cause suspend regression - and the
commit fixes a longstanding bug that existed before 2.6.25 was
opened - so it can wait some more until the effects are better
understood.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/tsc_32.c')
-rw-r--r-- | arch/x86/kernel/tsc_32.c | 15 |
1 files changed, 1 insertions, 14 deletions
diff --git a/arch/x86/kernel/tsc_32.c b/arch/x86/kernel/tsc_32.c index d7498b34c8e9..f14cfd9d1f94 100644 --- a/arch/x86/kernel/tsc_32.c +++ b/arch/x86/kernel/tsc_32.c | |||
@@ -287,27 +287,14 @@ core_initcall(cpufreq_tsc); | |||
287 | /* clock source code */ | 287 | /* clock source code */ |
288 | 288 | ||
289 | static unsigned long current_tsc_khz = 0; | 289 | static unsigned long current_tsc_khz = 0; |
290 | static struct clocksource clocksource_tsc; | ||
291 | 290 | ||
292 | /* | ||
293 | * We compare the TSC to the cycle_last value in the clocksource | ||
294 | * structure to avoid a nasty time-warp issue. This can be observed in | ||
295 | * a very small window right after one CPU updated cycle_last under | ||
296 | * xtime lock and the other CPU reads a TSC value which is smaller | ||
297 | * than the cycle_last reference value due to a TSC which is slighty | ||
298 | * behind. This delta is nowhere else observable, but in that case it | ||
299 | * results in a forward time jump in the range of hours due to the | ||
300 | * unsigned delta calculation of the time keeping core code, which is | ||
301 | * necessary to support wrapping clocksources like pm timer. | ||
302 | */ | ||
303 | static cycle_t read_tsc(void) | 291 | static cycle_t read_tsc(void) |
304 | { | 292 | { |
305 | cycle_t ret; | 293 | cycle_t ret; |
306 | 294 | ||
307 | rdtscll(ret); | 295 | rdtscll(ret); |
308 | 296 | ||
309 | return ret >= clocksource_tsc.cycle_last ? | 297 | return ret; |
310 | ret : clocksource_tsc.cycle_last; | ||
311 | } | 298 | } |
312 | 299 | ||
313 | static struct clocksource clocksource_tsc = { | 300 | static struct clocksource clocksource_tsc = { |