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
