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