diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2017-03-16 09:55:45 +0100 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-06-02 19:20:44 +1000 |
commit | 45cb08f4791ce6a15c54598b4cb73db4b4b8294f (patch) | |
tree | e2bcbc9d4375cfa58ea53996b93443021870dd5d /arch/powerpc/kernel/irq.c | |
parent | 3c29b6038828c1f4c9ecbfec14d4fc5e25f1c947 (diff) | |
download | linux-stable-45cb08f4791ce6a15c54598b4cb73db4b4b8294f.tar.gz linux-stable-45cb08f4791ce6a15c54598b4cb73db4b4b8294f.tar.bz2 linux-stable-45cb08f4791ce6a15c54598b4cb73db4b4b8294f.zip |
powerpc: Handle simultaneous interrupts at once
It often happens to have simultaneous interrupts, for instance
when having double Ethernet attachment. With the current
implementation, we suffer the cost of kernel entry/exit for each
interrupt.
This patch introduces a loop in __do_irq() to handle all interrupts
at once before returning.
Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel/irq.c')
-rw-r--r-- | arch/powerpc/kernel/irq.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 5c291df30fe3..ab2ed9afd3c2 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -481,7 +481,11 @@ void __do_irq(struct pt_regs *regs) if (unlikely(!irq)) __this_cpu_inc(irq_stat.spurious_irqs); else - generic_handle_irq(irq); + do { + generic_handle_irq(irq); + + irq = ppc_md.get_irq(); + } while (irq); trace_irq_exit(regs); |