diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-08-31 15:15:33 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-08-31 15:15:33 +0900 |
commit | 1279b7f1168ad6a2606191090f8a96eba64766a4 (patch) | |
tree | dc2a8ab17c70ab8704d5a36d9c3ec1e7c4e8e9e7 | |
parent | 2f6dafc5fcbf3fddce345c47da1f277a156fe22a (diff) |
sh: Fix up simplified multi-evt handling under sparseirq.
This fixes up the simplified multi-evt handling when sparseirq support is
enabled. While vectors are redirected through the single unique masking
source, each one of the redirected vectors still requires its own backing
irq_desc, which needs to be manually allocated in the sparseirq case.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
-rw-r--r-- | drivers/sh/intc.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/sh/intc.c b/drivers/sh/intc.c index a9174ec7285..559b5fe9dc0 100644 --- a/drivers/sh/intc.c +++ b/drivers/sh/intc.c @@ -749,7 +749,7 @@ void __init register_intc_controller(struct intc_desc *desc) irq_desc = irq_to_desc_alloc_node(irq, numa_node_id()); if (unlikely(!irq_desc)) { - printk(KERN_INFO "can not get irq_desc for %d\n", irq); + pr_info("can't get irq_desc for %d\n", irq); continue; } @@ -762,6 +762,17 @@ void __init register_intc_controller(struct intc_desc *desc) if (vect->enum_id != vect2->enum_id) continue; + /* + * In the case of multi-evt handling and sparse + * IRQ support, each vector still needs to have + * its own backing irq_desc. + */ + irq_desc = irq_to_desc_alloc_node(irq2, numa_node_id()); + if (unlikely(!irq_desc)) { + pr_info("can't get irq_desc for %d\n", irq2); + continue; + } + vect2->enum_id = 0; /* redirect this interrupts to the first one */ |