--- linux-2.6.30-rc6/arch/x86/kernel/apic/apic.c.0 2009-06-28 20:22:55.000000000 -0600 +++ linux-2.6.30-rc6/arch/x86/kernel/apic/apic.c 2009-06-29 00:21:44.000000000 -0600 @@ -419,7 +419,9 @@ static void lapic_timer_broadcast(const struct cpumask *mask) { #ifdef CONFIG_SMP - apic->send_IPI_mask(mask, LOCAL_TIMER_VECTOR); + if (cpus_empty(*mask)) + return; + apic->send_IPI_all(LOCAL_TIMER_VECTOR); #endif } --- linux-2.6.30-rc6/arch/x86/kernel/apic/apic_flat_64.c.0 2009-06-29 00:13:26.000000000 -0600 +++ linux-2.6.30-rc6/arch/x86/kernel/apic/apic_flat_64.c 2009-06-29 00:11:23.000000000 -0600 @@ -274,7 +274,12 @@ static void physflat_send_IPI_all(int vector) { - physflat_send_IPI_mask(cpu_online_mask, vector); + if (vector == NMI_VECTOR) { + physflat_send_IPI_mask(cpu_online_mask, vector); + } else { + __default_send_IPI_shortcut(APIC_DEST_ALLINC, + vector, apic->dest_logical); + } } static unsigned int physflat_cpu_mask_to_apicid(const struct cpumask *cpumask)