Skip to content

Commit

Permalink
x86: distangle user disabled TSC from unstable
Browse files Browse the repository at this point in the history
tsc_enabled is set to 0 from the command line switch "notsc" and from
the mark_tsc_unstable code. Seperate those functionalities and replace
tsc_enable with tsc_disable. This makes also the native_sched_clock()
decision when to use TSC understandable.

Preparatory patch to solve the sched_clock() issue on 32 bit.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
  • Loading branch information
Thomas Gleixner committed May 23, 2008
1 parent b6db80e commit 9ccc906
Showing 1 changed file with 10 additions and 10 deletions.
20 changes: 10 additions & 10 deletions arch/x86/kernel/tsc_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

#include "mach_timer.h"

static int tsc_enabled;
static int tsc_disabled;

/*
* On some systems the TSC frequency does not
Expand All @@ -28,8 +28,8 @@ EXPORT_SYMBOL_GPL(tsc_khz);
static int __init tsc_setup(char *str)
{
printk(KERN_WARNING "notsc: Kernel compiled with CONFIG_X86_TSC, "
"cannot disable TSC completely.\n");
mark_tsc_unstable("user disabled TSC");
"cannot disable TSC completely.\n");
tsc_disabled = 1;
return 1;
}
#else
Expand Down Expand Up @@ -120,7 +120,7 @@ unsigned long long native_sched_clock(void)
* very important for it to be as fast as the platform
* can achive it. )
*/
if (unlikely(!tsc_enabled && !tsc_unstable))
if (unlikely(tsc_disabled))
/* No locking but a rare wrong value is not a big deal: */
return (jiffies_64 - INITIAL_JIFFIES) * (1000000000 / HZ);

Expand Down Expand Up @@ -322,7 +322,6 @@ void mark_tsc_unstable(char *reason)
{
if (!tsc_unstable) {
tsc_unstable = 1;
tsc_enabled = 0;
printk("Marking TSC unstable due to: %s.\n", reason);
/* Can be called before registration */
if (clocksource_tsc.mult)
Expand All @@ -336,7 +335,7 @@ EXPORT_SYMBOL_GPL(mark_tsc_unstable);
static int __init dmi_mark_tsc_unstable(const struct dmi_system_id *d)
{
printk(KERN_NOTICE "%s detected: marking TSC unstable.\n",
d->ident);
d->ident);
tsc_unstable = 1;
return 0;
}
Expand Down Expand Up @@ -403,8 +402,11 @@ void __init tsc_init(void)
{
int cpu;

if (!cpu_has_tsc)
if (!cpu_has_tsc || tsc_disabled) {
/* Disable the TSC in case of !cpu_has_tsc */
tsc_disabled = 1;
return;
}

cpu_khz = calculate_cpu_khz();
tsc_khz = cpu_khz;
Expand Down Expand Up @@ -441,8 +443,6 @@ 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);
}

0 comments on commit 9ccc906

Please sign in to comment.