[PATCH] - Complete IRQ interrupt migration in arch_enable_uv_irq()

From: Jack Steiner
Date: Mon Jul 20 2009 - 10:28:48 EST


In uv_setup_irq(), the call to create_irq() initially assigns IRQ
vectors to cpu 0. The subsequent call to assign_irq_vector() in
arch_enable_uv_irq() migrates the IRQ to another cpu and frees the cpu
0 vector - at least it will be freed as soon as the "IRQ move"
completes.

arch_enable_uv_irq() needs to send a cleanup IPI to complete the IRQ move.
Otherwise, assignment of GRU interrupts on large systems (>200 cpus)
will exhaust the cpu 0 interrupt vectors and initialization of the GRU
driver will fail.

Signed-off-by: Jack Steiner <steiner@xxxxxxx>


---
arch/x86/kernel/apic/io_apic.c | 3 +++
1 file changed, 3 insertions(+)

Index: linux/arch/x86/kernel/apic/io_apic.c
===================================================================
--- linux.orig/arch/x86/kernel/apic/io_apic.c 2009-07-20 07:55:46.000000000 -0500
+++ linux/arch/x86/kernel/apic/io_apic.c 2009-07-20 07:56:33.000000000 -0500
@@ -3737,6 +3737,9 @@ int arch_enable_uv_irq(char *irq_name, u
mmr_pnode = uv_blade_to_pnode(mmr_blade);
uv_write_global_mmr64(mmr_pnode, mmr_offset, mmr_value);

+ if (cfg->move_in_progress)
+ send_cleanup_vector(cfg);
+
return irq;
}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/