[Skiboot] [PATCH] xive: Don't double EOI interrupts that have an EOI override

Benjamin Herrenschmidt benh at kernel.crashing.org
Thu Apr 20 22:00:40 AEST 2017

Some interrupts source such as PSI serirq have a special EOI override.

That override will perform the PQ bit EOI operation, so we must not
do a second one in xive_source_eoi().

This bug can cause queue overflows, especially when dealing with
runaway level interrupts.

Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>

This fixes the hangs on w18. It doesn't fix the massive slowdowns caused
by runaway mbox interrupts which I will look into separately.
 hw/xive.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/hw/xive.c b/hw/xive.c
index 530e0df..1e2648c 100644
--- a/hw/xive.c
+++ b/hw/xive.c
@@ -2531,8 +2531,8 @@ static void xive_source_eoi(struct irq_source *is, uint32_t isn)
 	if (s->orig_ops && s->orig_ops->eoi)
 		s->orig_ops->eoi(is, isn);
-	__xive_source_eoi(is, isn);
+	else
+		__xive_source_eoi(is, isn);
 static void xive_source_interrupt(struct irq_source *is, uint32_t isn)

More information about the Skiboot mailing list