On Mon, 31 Jan 2022, Sebastian Andrzej Siewior wrote: > generic_handle_irq() is invoked from a regular interrupt service > routine. This handler will become a forced-threaded handler on > PREEMPT_RT and will be invoked with enabled interrupts. The > generic_handle_irq() must be invoked with disabled interrupts in order > to avoid deadlocks. > > Instead of manually disabling interrupts before invoking use > generic_handle_irq_safe() which can be invoked with enabled and disabled > interrupts. > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > drivers/misc/hi6421v600-irq.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) The subject line should be "misc". > diff --git a/drivers/misc/hi6421v600-irq.c b/drivers/misc/hi6421v600-irq.c > index 1c763796cf1fa..caa3de37698b0 100644 > --- a/drivers/misc/hi6421v600-irq.c > +++ b/drivers/misc/hi6421v600-irq.c > @@ -117,8 +117,8 @@ static irqreturn_t hi6421v600_irq_handler(int irq, void *__priv) > * If both powerkey down and up IRQs are received, > * handle them at the right order > */ > - generic_handle_irq(priv->irqs[POWERKEY_DOWN]); > - generic_handle_irq(priv->irqs[POWERKEY_UP]); > + generic_handle_irq_safe(priv->irqs[POWERKEY_DOWN]); > + generic_handle_irq_safe(priv->irqs[POWERKEY_UP]); > pending &= ~HISI_IRQ_POWERKEY_UP_DOWN; > } > > @@ -126,7 +126,7 @@ static irqreturn_t hi6421v600_irq_handler(int irq, void *__priv) > continue; > > for_each_set_bit(offset, &pending, BITS_PER_BYTE) { > - generic_handle_irq(priv->irqs[offset + i * BITS_PER_BYTE]); > + generic_handle_irq_safe(priv->irqs[offset + i * BITS_PER_BYTE]); > } > } > -- Lee Jones [李琼斯] Principal Technical Lead - Developer Services Linaro.org │ Open source software for Arm SoCs Follow Linaro: Facebook | Twitter | Blog