Message ID | 20220131123404.175438-5-bigeasy@linutronix.de |
---|---|
State | Superseded |
Headers | show |
Series | Provide and use generic_handle_irq_safe() where appropriate. | expand |
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@linutronix.de> > --- > 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]); > } > } >
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]); } }
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@linutronix.de> --- drivers/misc/hi6421v600-irq.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)