|
@@ -361,6 +361,7 @@ static void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
|
if (likely(irqnr > 15 && irqnr < 1020)) {
|
|
if (likely(irqnr > 15 && irqnr < 1020)) {
|
|
if (static_key_true(&supports_deactivate))
|
|
if (static_key_true(&supports_deactivate))
|
|
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
|
writel_relaxed(irqstat, cpu_base + GIC_CPU_EOI);
|
|
|
|
+ isb();
|
|
handle_domain_irq(gic->domain, irqnr, regs);
|
|
handle_domain_irq(gic->domain, irqnr, regs);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
@@ -401,10 +402,12 @@ static void gic_handle_cascade_irq(struct irq_desc *desc)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
cascade_irq = irq_find_mapping(chip_data->domain, gic_irq);
|
|
cascade_irq = irq_find_mapping(chip_data->domain, gic_irq);
|
|
- if (unlikely(gic_irq < 32 || gic_irq > 1020))
|
|
|
|
|
|
+ if (unlikely(gic_irq < 32 || gic_irq > 1020)) {
|
|
handle_bad_irq(desc);
|
|
handle_bad_irq(desc);
|
|
- else
|
|
|
|
|
|
+ } else {
|
|
|
|
+ isb();
|
|
generic_handle_irq(cascade_irq);
|
|
generic_handle_irq(cascade_irq);
|
|
|
|
+ }
|
|
|
|
|
|
out:
|
|
out:
|
|
chained_irq_exit(chip, desc);
|
|
chained_irq_exit(chip, desc);
|