History

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

Linus Torvalds committed 10 years ago

Commit ea83ae22 parents a6a7358 abc7e401 file · +3 −3Browse files

Showing the changes to kernel (1 of 1 file). Show all

Unified · Split

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