eeh-powernv.c: Unbalanced IRQ warning
Alistair Popple
alistair at popple.id.au
Tue Jul 28 11:14:51 AEST 2015
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 <alistair at 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
More information about the Linuxppc-dev
mailing list