revert "x86: tsc prevent time going backwards"
revert:
| commit 47001d6033
| 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>
This commit is contained in:
parent
4cac04dd63
commit
5b13d86357
|
@ -287,27 +287,14 @@ core_initcall(cpufreq_tsc);
|
|||
/* clock source code */
|
||||
|
||||
static unsigned long current_tsc_khz = 0;
|
||||
static struct clocksource clocksource_tsc;
|
||||
|
||||
/*
|
||||
* We compare the TSC to the cycle_last value in the clocksource
|
||||
* structure to avoid a nasty time-warp issue. This can be observed in
|
||||
* a very small window right after one CPU updated cycle_last under
|
||||
* xtime lock and the other CPU reads a TSC value which is smaller
|
||||
* than the cycle_last reference value due to a TSC which is slighty
|
||||
* behind. This delta is nowhere else observable, but in that case it
|
||||
* results in a forward time jump in the range of hours due to the
|
||||
* unsigned delta calculation of the time keeping core code, which is
|
||||
* necessary to support wrapping clocksources like pm timer.
|
||||
*/
|
||||
static cycle_t read_tsc(void)
|
||||
{
|
||||
cycle_t ret;
|
||||
|
||||
rdtscll(ret);
|
||||
|
||||
return ret >= clocksource_tsc.cycle_last ?
|
||||
ret : clocksource_tsc.cycle_last;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct clocksource clocksource_tsc = {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include <asm/hpet.h>
|
||||
#include <asm/timex.h>
|
||||
#include <asm/timer.h>
|
||||
#include <asm/vgtod.h>
|
||||
|
||||
static int notsc __initdata = 0;
|
||||
|
||||
|
@ -291,34 +290,18 @@ int __init notsc_setup(char *s)
|
|||
|
||||
__setup("notsc", notsc_setup);
|
||||
|
||||
static struct clocksource clocksource_tsc;
|
||||
|
||||
/*
|
||||
* We compare the TSC to the cycle_last value in the clocksource
|
||||
* structure to avoid a nasty time-warp. This can be observed in a
|
||||
* very small window right after one CPU updated cycle_last under
|
||||
* xtime/vsyscall_gtod lock and the other CPU reads a TSC value which
|
||||
* is smaller than the cycle_last reference value due to a TSC which
|
||||
* is slighty behind. This delta is nowhere else observable, but in
|
||||
* that case it results in a forward time jump in the range of hours
|
||||
* due to the unsigned delta calculation of the time keeping core
|
||||
* code, which is necessary to support wrapping clocksources like pm
|
||||
* timer.
|
||||
*/
|
||||
/* clock source code: */
|
||||
static cycle_t read_tsc(void)
|
||||
{
|
||||
cycle_t ret = (cycle_t)get_cycles();
|
||||
|
||||
return ret >= clocksource_tsc.cycle_last ?
|
||||
ret : clocksource_tsc.cycle_last;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static cycle_t __vsyscall_fn vread_tsc(void)
|
||||
{
|
||||
cycle_t ret = (cycle_t)vget_cycles();
|
||||
|
||||
return ret >= __vsyscall_gtod_data.clock.cycle_last ?
|
||||
ret : __vsyscall_gtod_data.clock.cycle_last;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct clocksource clocksource_tsc = {
|
||||
|
|
Loading…
Reference in New Issue