Hi Daniel,
I see the problem - pnv_eeh_next_error() re-enables the interrupt but it gets
called from a loop if there are more outstanding events to process. The most
obvious solution would be to do this check before enabling interrupts:
if (ret == EEH_NEXT_ERR_NONE && eeh_enabled())
instead of:
if (eeh_enabled())
This should work fine so long as pnv_eeh_next_error() is called continuously
until is returns either EEH_NEXT_ERR_NONE or another value which signals that
pnv_eeh_next_error() should never be called again. As far as I can tell this
looks to be true (perhaps Gavin can confirm?)
Would you mind trying the below patch and seeing if it fixes the problem?
Thanks!
-- >8 --
From 6eeed1d6dd25e8cf6bfe3423dc50ff855d1cbc42 Mon Sep 17 00:00:00 2001
From: Alistair Popple <[email protected]>
---
arch/powerpc/platforms/powernv/eeh-powernv.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c
b/arch/powerpc/platforms/powernv/eeh-powernv.c
index ca825ec..ff41c03 100644
--- a/arch/powerpc/platforms/powernv/eeh-powernv.c
+++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
@@ -1478,7 +1478,7 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
}
/* Unmask the event */
- if (eeh_enabled())
+ if (ret == EEH_NEXT_ERR_NONE && eeh_enabled())
enable_irq(eeh_event_irq);
return ret;
--
1.8.3.2
_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://lists.ozlabs.org/listinfo/linuxppc-dev