aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/arch/microblaze/kernel
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2020-03-17 18:25:59 +0530
committerMarc Zyngier <maz@kernel.org>2020-03-22 11:52:53 +0000
commita0789993bf8266e62fea6b4613945ba081c71e7d (patch)
treebf2f87488c01b9f88f707a75776356c50809dfb2 /arch/microblaze/kernel
parentirqchip/xilinx: Fill error code when irq domain registration fails (diff)
downloadwireguard-linux-a0789993bf8266e62fea6b4613945ba081c71e7d.tar.xz
wireguard-linux-a0789993bf8266e62fea6b4613945ba081c71e7d.zip
irqchip/xilinx: Enable generic irq multi handler
Register default arch handler via driver instead of directly pointing to xilinx intc controller. This patch makes architecture code more generic. Driver calls generic domain specific irq handler which does the most of things self. Also get rid of concurrent_irq counting which hasn't been exported anywhere. Based on this loop was also optimized by using do/while loop instead of goto loop. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Stefan Asserhall <stefan.asserhall@xilinx.com> Link: https://lore.kernel.org/r/20200317125600.15913-4-mubin.usman.sayyed@xilinx.com
Diffstat (limited to 'arch/microblaze/kernel')
-rw-r--r--arch/microblaze/kernel/irq.c21
1 files changed, 1 insertions, 20 deletions
diff --git a/arch/microblaze/kernel/irq.c b/arch/microblaze/kernel/irq.c
index 903dad822fad..0b37dde60a1e 100644
--- a/arch/microblaze/kernel/irq.c
+++ b/arch/microblaze/kernel/irq.c
@@ -20,29 +20,10 @@
#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();
-
- 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);
+ handle_arch_irq(regs);
trace_hardirqs_on();
}