[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