[PATCH v2] powerpc: handle simultaneous interrupts at once

Subsystems: linux for powerpc (32-bit and 64-bit), the rest

STALE3361d

3 messages, 3 authors, 2017-06-05 · open the first message on its own page

[PATCH v2] powerpc: handle simultaneous interrupts at once

From: Christophe Leroy <hidden>
Date: 2017-03-16 08:57:19

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 <redacted>
---
Changed from v1(RFC): simplified following remark from benh

 arch/powerpc/kernel/irq.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index a018f5cae899..ba0cb6c2ee7d 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -522,7 +522,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);
 
-- 
2.12.0

Re: [v2] powerpc: handle simultaneous interrupts at once

From: Michael Ellerman <hidden>
Date: 2017-06-05 10:21:52

On Thu, 2017-03-16 at 08:55:45 UTC, Christophe Leroy wrote:
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 <redacted>
Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/45cb08f4791ce6a15c54598b4cb73d

cheers

Re: [v2] powerpc: handle simultaneous interrupts at once

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2017-06-05 11:17:40

On Mon, 2017-06-05 at 20:21 +1000, Michael Ellerman wrote:
On Thu, 2017-03-16 at 08:55:45 UTC, Christophe Leroy wrote:
quoted
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 <redacted>
Applied to powerpc next, thanks.

https://git.kernel.org/powerpc/c/45cb08f4791ce6a15c54598b4cb73d
Hrm, I hadn't noticed that patch...

We used to do that and then removed the code for it. There's a cost,
sometimes noticeable, to an extra call to ppc_md.get_irq.

Why not have your get_irq (or eoi) implementation set a per-cpu
requesting a new spin of the loop ?

We could move the xive force replay stuff to use the same thing.

Ben.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help