sh: Fix up simplified multi-evt handling under sparseirq.
authorPaul Mundt <lethal@linux-sh.org>
Mon, 31 Aug 2009 06:15:33 +0000 (15:15 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 31 Aug 2009 06:15:33 +0000 (15:15 +0900)
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>
drivers/sh/intc.c

index a9174ec..559b5fe 100644 (file)
@@ -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 */