From: Thomas Gleixner The APIC timer setup code synchronizes the local APIC timer to the PIT/HPET. This is pointless as the PIT and the local APIC timer frequency are not correlated and the APIC timer calibration can never be accurate enough to avoid that the local APIC timer and the PIT/HPET drift apart. Simply remove it. Signed-off-by: Thomas Gleixner Signed-off-by: Chris Wright Signed-off-by: Ingo Molnar Cc: Andi Kleen Cc: john stultz Signed-off-by: Andrew Morton --- arch/x86_64/kernel/apic.c | 18 ------------------ 1 file changed, 18 deletions(-) diff -puN arch/x86_64/kernel/apic.c~x86_64-apic-remove-bogus-pit-synchronization arch/x86_64/kernel/apic.c --- a/arch/x86_64/kernel/apic.c~x86_64-apic-remove-bogus-pit-synchronization +++ a/arch/x86_64/kernel/apic.c @@ -770,24 +770,6 @@ static void setup_APIC_timer(unsigned in local_irq_save(flags); - /* wait for irq slice */ - if (hpet_address && hpet_use_timer) { - u32 trigger = hpet_readl(HPET_T0_CMP); - while (hpet_readl(HPET_T0_CMP) == trigger) - /* do nothing */ ; - } else { - int c1, c2; - outb_p(0x00, 0x43); - c2 = inb_p(0x40); - c2 |= inb_p(0x40) << 8; - do { - c1 = c2; - outb_p(0x00, 0x43); - c2 = inb_p(0x40); - c2 |= inb_p(0x40) << 8; - } while (c2 - c1 < 300); - } - irqen = ! cpu_isset(smp_processor_id(), timer_interrupt_broadcast_ipi_mask); __setup_APIC_LVTT(clocks, 0, irqen); _