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