[patch 17/22] GTOD: Mark TSC unusable for highres timers

From: Thomas Gleixner
Date: Wed Oct 04 2006 - 13:41:00 EST


From: Thomas Gleixner <tglx@xxxxxxxxxxxxx>

The TSC is too unstable and unreliable to be used with high
resolution timers. The automatic detection of TSC unstability
fails once we switched to high resolution mode, because the
tick emulation would use the TSC as reference. This results in
a circular dependency. Mark it unusable for high res upfront.

Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Signed-off-by: Ingo Molnar <mingo@xxxxxxx>
arch/i386/kernel/tsc.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

Index: linux-2.6.18-mm3/arch/i386/kernel/tsc.c
===================================================================
--- linux-2.6.18-mm3.orig/arch/i386/kernel/tsc.c 2006-10-04 18:20:12.000000000 +0200
+++ linux-2.6.18-mm3/arch/i386/kernel/tsc.c 2006-10-04 18:26:38.000000000 +0200
@@ -459,10 +459,23 @@ static int __init init_tsc_clocksource(v
current_tsc_khz = tsc_khz;
clocksource_tsc.mult = clocksource_khz2mult(current_tsc_khz,
clocksource_tsc.shift);
+#ifndef CONFIG_HIGH_RES_TIMERS
/* lower the rating if we already know its unstable: */
if (check_tsc_unstable())
clocksource_tsc.rating = 50;
-
+#else
+ /*
+ * Mark TSC unsuitable for high resolution timers. TSC has so
+ * many pitfalls: frequency changes, stop in idle ... When we
+ * switch to high resolution mode we can not longer detect a
+ * firmware caused frequency change, as the emulated tick uses
+ * TSC as reference. This results in a circular dependency.
+ * Switch only to high resolution mode, if pm_timer or such
+ * is available.
+ */
+ clocksource_tsc.rating = 50;
+ clocksource_tsc.is_continuous = 0;
+#endif
init_timer(&verify_tsc_freq_timer);
verify_tsc_freq_timer.function = verify_tsc_freq;
verify_tsc_freq_timer.expires =

--

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/