|
@@ -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;
|
|
|
|
|
@@ -149,9 +148,7 @@ static int time_cpufreq_notifier(struct notifier_block *nb, unsigned long val,
|
|
|
mark_tsc_unstable("cpufreq changes");
|
|
|
}
|
|
|
|
|
|
- preempt_disable();
|
|
|
- set_cyc2ns_scale(tsc_khz_ref, smp_processor_id());
|
|
|
- preempt_enable();
|
|
|
+ set_cyc2ns_scale(tsc_khz_ref, freq->cpu);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
@@ -291,34 +288,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 = {
|