Merge tag 'v5.11-rc1' into regulator-5.11
[linux-2.6-microblaze.git] / arch / microblaze / kernel / irq.c
index 0b37dde..903dad8 100644 (file)
 #include <linux/irqchip.h>
 #include <linux/of_irq.h>
 
+static u32 concurrent_irq;
+
 void __irq_entry do_IRQ(struct pt_regs *regs)
 {
+       unsigned int irq;
+       struct pt_regs *old_regs = set_irq_regs(regs);
        trace_hardirqs_off();
-       handle_arch_irq(regs);
+
+       irq_enter();
+       irq = xintc_get_irq();
+next_irq:
+       BUG_ON(!irq);
+       generic_handle_irq(irq);
+
+       irq = xintc_get_irq();
+       if (irq != -1U) {
+               pr_debug("next irq: %d\n", irq);
+               ++concurrent_irq;
+               goto next_irq;
+       }
+
+       irq_exit();
+       set_irq_regs(old_regs);
        trace_hardirqs_on();
 }