Skip to content

Commit 1d229a6

Browse files
committed
Merge tag 'irq-urgent-2020-08-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq fixes from Thomas Gleixner: "Two fixes in the core interrupt code which ensure that all error exits unlock the descriptor lock" * tag 'irq-urgent-2020-08-14' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: genirq: Unlock irq descriptor after errors genirq/PM: Always unlock IRQ descriptor in rearm_wake_irq()
2 parents e1d74fb + f107cee commit 1d229a6

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

kernel/irq/manage.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2731,8 +2731,10 @@ int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
27312731

27322732
do {
27332733
chip = irq_data_get_irq_chip(data);
2734-
if (WARN_ON_ONCE(!chip))
2735-
return -ENODEV;
2734+
if (WARN_ON_ONCE(!chip)) {
2735+
err = -ENODEV;
2736+
goto out_unlock;
2737+
}
27362738
if (chip->irq_set_irqchip_state)
27372739
break;
27382740
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY
@@ -2745,6 +2747,7 @@ int irq_set_irqchip_state(unsigned int irq, enum irqchip_irq_state which,
27452747
if (data)
27462748
err = chip->irq_set_irqchip_state(data, which, val);
27472749

2750+
out_unlock:
27482751
irq_put_desc_busunlock(desc, flags);
27492752
return err;
27502753
}

kernel/irq/pm.c

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,14 +185,18 @@ void rearm_wake_irq(unsigned int irq)
185185
unsigned long flags;
186186
struct irq_desc *desc = irq_get_desc_buslock(irq, &flags, IRQ_GET_DESC_CHECK_GLOBAL);
187187

188-
if (!desc || !(desc->istate & IRQS_SUSPENDED) ||
189-
!irqd_is_wakeup_set(&desc->irq_data))
188+
if (!desc)
190189
return;
191190

191+
if (!(desc->istate & IRQS_SUSPENDED) ||
192+
!irqd_is_wakeup_set(&desc->irq_data))
193+
goto unlock;
194+
192195
desc->istate &= ~IRQS_SUSPENDED;
193196
irqd_set(&desc->irq_data, IRQD_WAKEUP_ARMED);
194197
__enable_irq(desc);
195198

199+
unlock:
196200
irq_put_desc_busunlock(desc, flags);
197201
}
198202

0 commit comments

Comments
 (0)