Subject: Re: eeh-powernv.c: Unbalanced IRQ warning

From: Gavin Shan <[email-masked]>
Date: Tue, 28 Jul 2015 11:28:32 +1000

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 <[email-masked]>
>
>---
> 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
>
>