Subject: Re: [PATCH] powerpc/eeh: eeh_pci_enable(): fix checking of post-request state

From: Gavin Shan <[email-masked]>
Date: Sat, 24 Oct 2015 12:23:05 +1100

On Fri, Oct 23, 2015 at 05:19:46PM +1100, Andrew Donnellan wrote:
>In eeh_pci_enable(), after making the request to set the new options, we
>call eeh_ops->wait_state() to check that the request finished successfully.
>
>At the moment, if eeh_ops->wait_state() returns 0, we return 0 without
>checking that it reflects the expected outcome. This can lead to callers
>further up the chain incorrectly assuming the slot has been successfully
>unfrozen and continuing to attempt recovery.
>
>On powernv, this will occur if pnv_eeh_get_pe_state() or
>pnv_eeh_get_phb_state() return 0, which in turn occurs if the relevant OPAL
>call returns OPAL_EEH_STOPPED_MMIO_DMA_FREEZE or
>OPAL_EEH_PHB_ERROR respectively.
>
>On pseries, this will occur if pseries_eeh_get_state() returns 0, which in
>turn occurs if RTAS reports that the PE is in the MMIO Stopped and DMA
>Stopped states.
>
>Obviously, none of these cases represent a successful completion of a
>request to thaw MMIO or DMA.
>
>Fix the check so that a wait_state() return value of 0 won't be considered
>successful for the EEH_OPT_THAW_MMIO or EEH_OPT_THAW_DMA cases.
>
>Cc: Gavin Shan <[email-masked]>
>Signed-off-by: Andrew Donnellan <[email-masked]>

Acked-by: Gavin Shan <[email-masked]>

Thanks,
Gavin

>---
> arch/powerpc/kernel/eeh.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
>index 40e4d4a..d757e7c 100644
>--- a/arch/powerpc/kernel/eeh.c
>+++ b/arch/powerpc/kernel/eeh.c
>@@ -677,7 +677,7 @@ int eeh_pci_enable(struct eeh_pe *pe, int function)
> 	/* Check if the request is finished successfully */
> 	if (active_flag) {
> 		rc = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC);
>-		if (rc <= 0)
>+		if (rc < 0)
> 			return rc;
>
> 		if (rc & active_flag)
>-- 
>Andrew Donnellan              Software Engineer, OzLabs
>[email-masked]  Australia Development Lab, Canberra
>+61 2 6201 8874 (work)        IBM Australia Limited
>