lkml.org 
[lkml]   [2009]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
Subject[PATCH] - Complete IRQ interrupt migration in arch_enable_uv_irq()
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@sgi.com>


---
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;
}


\
 
 \ /
  Last update: 2009-07-20 16:31    [W:5.331 / U:0.016 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site