eeh-powernv.c: Unbalanced IRQ warning

Alistair Popple alistair at popple.id.au
Tue Jul 28 15:39:30 AEST 2015


On Tue, 28 Jul 2015 11:56:31 Daniel Axtens wrote:
> Hi Alistair and Gavin,
> 
> The patch from Alistair fixes my issue. Thanks heaps!
> 
> Alistair, are you right to post that formally?

Yep. I'll post it tomorrow morning.

> Regards,
> Daniel
> 
> On Tue, 2015-07-28 at 11:28 +1000, Gavin Shan wrote:
> > On Tue, Jul 28, 2015 at 11:14:51AM +1000, Alistair Popple wrote:
> > >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?)
> > >
> > 
> > Yeah, I confirmed. The way that Alistair fixes the issue is simple and more
> > precise. Please try his fix and ignore the one I sent couple of minutes
> > before.
> > 
> > Thanks,
> > Gavin
> > 
> > >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;
> > 
> 
> 



More information about the Linuxppc-dev mailing list