|
@@ -18,6 +18,8 @@
|
|
|
|
|
|
#include "mach_timer.h"
|
|
|
|
|
|
+static int tsc_enabled;
|
|
|
+
|
|
|
/*
|
|
|
* On some systems the TSC frequency does not
|
|
|
* change with the cpu frequency. So we need
|
|
@@ -105,7 +107,7 @@ unsigned long long sched_clock(void)
|
|
|
/*
|
|
|
* Fall back to jiffies if there's no TSC available:
|
|
|
*/
|
|
|
- if (tsc_unstable || unlikely(tsc_disable))
|
|
|
+ if (unlikely(!tsc_enabled))
|
|
|
/* No locking but a rare wrong value is not a big deal: */
|
|
|
return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);
|
|
|
|
|
@@ -283,6 +285,7 @@ void mark_tsc_unstable(void)
|
|
|
{
|
|
|
if (!tsc_unstable) {
|
|
|
tsc_unstable = 1;
|
|
|
+ tsc_enabled = 0;
|
|
|
/* Can be called before registration */
|
|
|
if (clocksource_tsc.mult)
|
|
|
clocksource_change_rating(&clocksource_tsc, 0);
|
|
@@ -383,7 +386,9 @@ void __init tsc_init(void)
|
|
|
if (check_tsc_unstable()) {
|
|
|
clocksource_tsc.rating = 0;
|
|
|
clocksource_tsc.flags &= ~CLOCK_SOURCE_IS_CONTINUOUS;
|
|
|
- }
|
|
|
+ } else
|
|
|
+ tsc_enabled = 1;
|
|
|
+
|
|
|
clocksource_register(&clocksource_tsc);
|
|
|
|
|
|
return;
|