Quellcode durchsuchen

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>
Paul Mundt vor 15 Jahren
Ursprung
Commit
1279b7f116
1 geänderte Dateien mit 12 neuen und 1 gelöschten Zeilen
  1. 12 1
      drivers/sh/intc.c

+ 12 - 1
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 */