diff mbox series

mailbox: qcom-ipcc: Use generic_handle_irq_safe()

Message ID 20220909162043.2734873-1-echanude@redhat.com (mailing list archive)
State Not Applicable
Headers show
Series mailbox: qcom-ipcc: Use generic_handle_irq_safe() | expand

Commit Message

Eric Chanudet Sept. 9, 2022, 4:20 p.m. UTC
PREEMPT_RT forces qcom-ipcc's handler to be threaded with interrupts
enabled, which triggers a warning in __handle_irq_event_percpu().

Use generic_handle_irq_safe() that can be called with or without
interrupts enabled instead.

Signed-off-by: Eric Chanudet <echanude@redhat.com>
---
 drivers/mailbox/qcom-ipcc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Sebastian Andrzej Siewior Sept. 13, 2022, 9:40 a.m. UTC | #1
On 2022-09-09 12:20:43 [-0400], Eric Chanudet wrote:
> PREEMPT_RT forces qcom-ipcc's handler to be threaded with interrupts
> enabled, which triggers a warning in __handle_irq_event_percpu().
> 
> Use generic_handle_irq_safe() that can be called with or without
> interrupts enabled instead.

wouldn't IRQF_NO_THREAD be a better match here?

> Signed-off-by: Eric Chanudet <echanude@redhat.com>

Sebastian
Eric Chanudet Oct. 3, 2022, 5:23 p.m. UTC | #2
On Tue, Sep 13, 2022 at 11:40:09AM +0200, Sebastian Andrzej Siewior wrote:
> On 2022-09-09 12:20:43 [-0400], Eric Chanudet wrote:
> > PREEMPT_RT forces qcom-ipcc's handler to be threaded with interrupts
> > enabled, which triggers a warning in __handle_irq_event_percpu().
> > 
> > Use generic_handle_irq_safe() that can be called with or without
> > interrupts enabled instead.
> 
> wouldn't IRQF_NO_THREAD be a better match here?

Agreed, my apologies for the delay:
https://lore.kernel.org/linux-arm-msm/20221003170849.383005-1-echanude@redhat.com/

Thanks,
diff mbox series

Patch

diff --git a/drivers/mailbox/qcom-ipcc.c b/drivers/mailbox/qcom-ipcc.c
index 31d58b7d55fe..be803f324a33 100644
--- a/drivers/mailbox/qcom-ipcc.c
+++ b/drivers/mailbox/qcom-ipcc.c
@@ -82,7 +82,7 @@  static irqreturn_t qcom_ipcc_irq_fn(int irq, void *data)
 
 		virq = irq_find_mapping(ipcc->irq_domain, hwirq);
 		writel(hwirq, ipcc->base + IPCC_REG_RECV_SIGNAL_CLEAR);
-		generic_handle_irq(virq);
+		generic_handle_irq_safe(virq);
 	}
 
 	return IRQ_HANDLED;