Messages in this thread Patch in this message | | | Date | Tue, 30 Jun 2009 15:01:07 +0800 | Subject | Re: [RFC patch] Use IPI_shortcut for lapic timer broadcast | From | Luming Yu <> |
| |
Thanks for review. How about the following patch?
/**The patch is enclosed in text attachment** **Using web client to send the patch** **below is for review, please apply attached patch*/
Signed-off-by: Yu Luming <luming.yu@intel.com>
apic.c | 5 ++++- apic_flat_64.c | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-)
--- linux-2.6.30-rc6/arch/x86/kernel/apic/apic.c.0 2009-06-29 23:45:05.000000000 -0600 +++ linux-2.6.30-rc6/arch/x86/kernel/apic/apic.c 2009-06-30 00:37:56.000000000 -0600 @@ -419,7 +419,10 @@ static void lapic_timer_broadcast(const struct cpumask *mask) { #ifdef CONFIG_SMP - apic->send_IPI_mask(mask, LOCAL_TIMER_VECTOR); + if (unlikely(cpumask_weight(mask) == num_online_cpus() -1)) + apic->send_IPI_all(LOCAL_TIMER_VECTOR); + else + apic->send_IPI_mask(mask, 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)[unhandled content-type:application/octet-stream] | |