irq fix
Linus,
Please pull the latest irq-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-urgent-for-linus
# HEAD: abc7e40c81d113ef4bacb556f0a77ca63ac81d85 genirq: Prevent chip buslock deadlock
Fixes a core IRQ subsystem deadlock.
Thanks,
Ingo
------------------>
Thomas Gleixner (1):
genirq: Prevent chip buslock deadlock
kernel/irq/manage.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
kernel/irq/manage.c +3 -3
@@ -1434,6 +1434,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)if (!desc)return NULL ; +chip_bus_lock (desc);raw_spin_lock_irqsave (&desc->lock, flags);/*
@@ -1447,7 +1448,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)if (!action) {WARN (1 ,"Trying to free already-free IRQ %d\n" , irq);raw_spin_unlock_irqrestore (&desc->lock, flags); - +chip_bus_sync_unlock (desc);return NULL ; }
@@ -1475,6 +1476,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id)#endif raw_spin_unlock_irqrestore (&desc->lock, flags); +chip_bus_sync_unlock (desc);unregister_handler_proc (irq, action);
@@ -1553,9 +1555,7 @@ void free_irq(unsigned int irq, void *dev_id) desc->affinity_notify =NULL ;#endif -chip_bus_lock (desc);kfree (__free_irq (irq, dev_id)); -chip_bus_sync_unlock (desc); }EXPORT_SYMBOL (free_irq);