Messages in this thread Patch in this message | | | Date | Mon, 29 Jun 2009 14:47:57 +0800 | Subject | [RFC patch] Use IPI_shortcut for lapic timer broadcast | From | Luming Yu <> |
| |
Hello,
We need to use IPI shortcut to send lapic timer broadcast to avoid the latency of sending IPI one bye one on systems with many logical processors when NO_HZ is disabled. Without this patch,I have seen upstream kernel with RHEL 5 kernel config boot hang .
The patch also changes physflat_send_IPI_all to IPI shortcut mode.
Please review, and apply.
**The patch is enclosed in text attachment* **Using web client to send the patch* * **below is for review, please apply attached patch*/
Thanks, Luming
Signed-off-by: Yu Luming <luming.yu@intel.com>
apic.c | 4 +++- apic_flat_64.c | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-)
--- 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)[unhandled content-type:application/octet-stream] | |