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 <alist...@popple.id.au>

---
 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
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to