Merge branch 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull irq fix from Ingo Molnar:
"Fixes a core IRQ subsystem deadlock"

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
genirq: Prevent chip buslock deadlock

+3 -3
+3 -3
kernel/irq/manage.c
··· 1434 if (!desc) 1435 return NULL; 1436 1437 raw_spin_lock_irqsave(&desc->lock, flags); 1438 1439 /* ··· 1448 if (!action) { 1449 WARN(1, "Trying to free already-free IRQ %d\n", irq); 1450 raw_spin_unlock_irqrestore(&desc->lock, flags); 1451 - 1452 return NULL; 1453 } 1454 ··· 1476 #endif 1477 1478 raw_spin_unlock_irqrestore(&desc->lock, flags); 1479 1480 unregister_handler_proc(irq, action); 1481 ··· 1555 desc->affinity_notify = NULL; 1556 #endif 1557 1558 - chip_bus_lock(desc); 1559 kfree(__free_irq(irq, dev_id)); 1560 - chip_bus_sync_unlock(desc); 1561 } 1562 EXPORT_SYMBOL(free_irq); 1563
··· 1434 if (!desc) 1435 return NULL; 1436 1437 + chip_bus_lock(desc); 1438 raw_spin_lock_irqsave(&desc->lock, flags); 1439 1440 /* ··· 1447 if (!action) { 1448 WARN(1, "Trying to free already-free IRQ %d\n", irq); 1449 raw_spin_unlock_irqrestore(&desc->lock, flags); 1450 + chip_bus_sync_unlock(desc); 1451 return NULL; 1452 } 1453 ··· 1475 #endif 1476 1477 raw_spin_unlock_irqrestore(&desc->lock, flags); 1478 + chip_bus_sync_unlock(desc); 1479 1480 unregister_handler_proc(irq, action); 1481 ··· 1553 desc->affinity_notify = NULL; 1554 #endif 1555 1556 kfree(__free_irq(irq, dev_id)); 1557 } 1558 EXPORT_SYMBOL(free_irq); 1559