aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/i8253.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/x86/kernel/i8253.c b/arch/x86/kernel/i8253.c
index a42c80745325..0f8f35458a8f 100644
--- a/arch/x86/kernel/i8253.c
+++ b/arch/x86/kernel/i8253.c
@@ -197,7 +197,15 @@ static struct clocksource clocksource_pit = {
197 197
198static int __init init_pit_clocksource(void) 198static int __init init_pit_clocksource(void)
199{ 199{
200 if (num_possible_cpus() > 1) /* PIT does not scale! */ 200 /*
201 * Several reasons not to register PIT as a clocksource:
202 *
203 * - On SMP PIT does not scale due to i8253_lock
204 * - when HPET is enabled
205 * - when local APIC timer is active (PIT is switched off)
206 */
207 if (num_possible_cpus() > 1 || is_hpet_enabled() ||
208 pit_clockevent.mode != CLOCK_EVT_MODE_PERIODIC)
201 return 0; 209 return 0;
202 210
203 clocksource_pit.mult = clocksource_hz2mult(CLOCK_TICK_RATE, 20); 211 clocksource_pit.mult = clocksource_hz2mult(CLOCK_TICK_RATE, 20);