Title: [5280] trunk/arch/blackfin/mach-common/ints-priority.c: Not call generic set_irq_handler() in bfin_gpio_irq_type() due to spinlock recursion
Revision
5280
Author
gyang
Date
2008-09-11 03:59:13 -0500 (Thu, 11 Sep 2008)

Log Message

Not call generic set_irq_handler() in bfin_gpio_irq_type() due to spinlock recursion

Modified Paths

Diff

Modified: trunk/arch/blackfin/mach-common/ints-priority.c (5279 => 5280)


--- trunk/arch/blackfin/mach-common/ints-priority.c	2008-09-11 08:50:49 UTC (rev 5279)
+++ trunk/arch/blackfin/mach-common/ints-priority.c	2008-09-11 08:59:13 UTC (rev 5280)
@@ -364,6 +364,14 @@
 }
 #endif				/* BF537_GENERIC_ERROR_INT_DEMUX */
 
+static inline void bfin_set_irq_handler(unsigned irq, irq_flow_handler_t handle)
+{
+	struct irq_desc *desc = irq_desc + irq;
+	/* May not call generic set_irq_handler() due to spinlock
+	   recursion. */
+	desc->handle_irq = handle;
+}
+
 #if !defined(CONFIG_BF54x)
 
 static unsigned short gpio_enabled[gpio_bank(MAX_BLACKFIN_GPIOS)];
@@ -476,9 +484,9 @@
 	SSYNC();
 
 	if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING))
-		set_irq_handler(irq, handle_edge_irq);
+		bfin_set_irq_handler(irq, handle_edge_irq);
 	else
-		set_irq_handler(irq, handle_level_irq);
+		bfin_set_irq_handler(irq, handle_level_irq);
 
 	return 0;
 }
@@ -808,10 +816,10 @@
 
 	if (type & (IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING)) {
 		pint[bank]->edge_set = pintbit;
-		set_irq_handler(irq, handle_edge_irq);
+		bfin_set_irq_handler(irq, handle_edge_irq);
 	} else {
 		pint[bank]->edge_clear = pintbit;
-		set_irq_handler(irq, handle_level_irq);
+		bfin_set_irq_handler(irq, handle_level_irq);
 	}
 
 	SSYNC();
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
http://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to