When no interrupt bits are set in the event register, call
handle_bad_irq() to account for the spurious interrupt before
exiting the cascade handler.

Signed-off-by: Paul Louvel <[email protected]>
---
 drivers/soc/fsl/qe/qe_ports_ic.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/soc/fsl/qe/qe_ports_ic.c b/drivers/soc/fsl/qe/qe_ports_ic.c
index 27b62f4e3afb..c8b73b0aa233 100644
--- a/drivers/soc/fsl/qe/qe_ports_ic.c
+++ b/drivers/soc/fsl/qe/qe_ports_ic.c
@@ -77,9 +77,15 @@ static void qepic_cascade(struct irq_desc *desc)
        chained_irq_enter(chip, desc);
 
        event = in_be32(data->reg + CEPIER);
+       if (!event) {
+               handle_bad_irq(desc);
+               goto out;
+       }
+
        for_each_set_bit(bit, &event, 32)
                generic_handle_domain_irq(data->host, 32 - bit);
 
+out:
        chained_irq_exit(chip, desc);
 }
 

-- 
2.55.0


Reply via email to