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