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
14341434 if (!desc)
14351435 return NULL;
14361436
1437+ chip_bus_lock(desc);
14371438 raw_spin_lock_irqsave(&desc->lock, flags);
14381439
14391440 /*
@@ -1447,7 +1448,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) · 7 unmodified lines
14471448 if (!action) {
14481449 WARN(1, "Trying to free already-free IRQ %d\n", irq);
14491450 raw_spin_unlock_irqrestore(&desc->lock, flags);
1450−
1451+ chip_bus_sync_unlock(desc);
14511452 return NULL;
14521453 }
14531454
@@ -1475,6 +1476,7 @@ static struct irqaction *__free_irq(unsigned int irq, void *dev_id) · 21 unmodified lines
14751476 #endif
14761477
14771478 raw_spin_unlock_irqrestore(&desc->lock, flags);
1479+ chip_bus_sync_unlock(desc);
14781480
14791481 unregister_handler_proc(irq, action);
14801482
@@ -1553,9 +1555,7 @@ void free_irq(unsigned int irq, void *dev_id) · 72 unmodified lines
15531555 desc->affinity_notify = NULL;
15541556 #endif
15551557
1556− chip_bus_lock(desc);
15571558 kfree(__free_irq(irq, dev_id));
1558− chip_bus_sync_unlock(desc);
15591559 }
15601560 EXPORT_SYMBOL(free_irq);
15611561