On 19/3/18 1:49 pm, Sam Bobroff wrote:
> Checking for a "fully active" device state requires testing two flag
> bits, which is open coded in several places, so add a function to do
> it.
> 
> Signed-off-by: Sam Bobroff <sam.bobr...@au1.ibm.com>


Reviewed-by: Alexey Kardashevskiy <a...@ozlabs.ru>


> ---
>  arch/powerpc/include/asm/eeh.h               |  6 ++++++
>  arch/powerpc/kernel/eeh.c                    | 19 ++++++-------------
>  arch/powerpc/platforms/powernv/eeh-powernv.c |  9 ++-------
>  3 files changed, 14 insertions(+), 20 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h
> index fd37cc101f4f..c2266ca61853 100644
> --- a/arch/powerpc/include/asm/eeh.h
> +++ b/arch/powerpc/include/asm/eeh.h
> @@ -256,6 +256,12 @@ static inline void eeh_serialize_unlock(unsigned long 
> flags)
>       raw_spin_unlock_irqrestore(&confirm_error_lock, flags);
>  }
>  
> +static inline bool eeh_state_active(int state)
> +{
> +     return (state & (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE))
> +     == (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
> +}
> +
>  typedef void *(*eeh_traverse_func)(void *data, void *flag);
>  void eeh_set_pe_aux_size(int size);
>  int eeh_phb_pe_create(struct pci_controller *phb);
> diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
> index 2b9df0040d6b..bc640e4c5ca5 100644
> --- a/arch/powerpc/kernel/eeh.c
> +++ b/arch/powerpc/kernel/eeh.c
> @@ -394,9 +394,7 @@ static int eeh_phb_check_failure(struct eeh_pe *pe)
>       /* Check PHB state */
>       ret = eeh_ops->get_state(phb_pe, NULL);
>       if ((ret < 0) ||
> -         (ret == EEH_STATE_NOT_SUPPORT) ||
> -         (ret & (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) ==
> -         (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE)) {
> +         (ret == EEH_STATE_NOT_SUPPORT) || eeh_state_active(ret)) {
>               ret = 0;
>               goto out;
>       }
> @@ -433,7 +431,6 @@ static int eeh_phb_check_failure(struct eeh_pe *pe)
>  int eeh_dev_check_failure(struct eeh_dev *edev)
>  {
>       int ret;
> -     int active_flags = (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
>       unsigned long flags;
>       struct device_node *dn;
>       struct pci_dev *dev;
> @@ -525,8 +522,7 @@ int eeh_dev_check_failure(struct eeh_dev *edev)
>        * state, PE is in good state.
>        */
>       if ((ret < 0) ||
> -         (ret == EEH_STATE_NOT_SUPPORT) ||
> -         ((ret & active_flags) == active_flags)) {
> +         (ret == EEH_STATE_NOT_SUPPORT) || eeh_state_active(ret)) {
>               eeh_stats.false_positives++;
>               pe->false_positives++;
>               rc = 0;
> @@ -546,8 +542,7 @@ int eeh_dev_check_failure(struct eeh_dev *edev)
>  
>               /* Frozen parent PE ? */
>               ret = eeh_ops->get_state(parent_pe, NULL);
> -             if (ret > 0 &&
> -                 (ret & active_flags) != active_flags)
> +             if (ret > 0 && !eeh_state_active(ret))
>                       pe = parent_pe;
>  
>               /* Next parent level */
> @@ -888,7 +883,6 @@ static void *eeh_set_dev_freset(void *data, void *flag)
>   */
>  int eeh_pe_reset_full(struct eeh_pe *pe)
>  {
> -     int active_flags = (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
>       int reset_state = (EEH_PE_RESET | EEH_PE_CFG_BLOCKED);
>       int type = EEH_RESET_HOT;
>       unsigned int freset = 0;
> @@ -919,7 +913,7 @@ int eeh_pe_reset_full(struct eeh_pe *pe)
>  
>               /* Wait until the PE is in a functioning state */
>               state = eeh_ops->wait_state(pe, PCI_BUS_RESET_WAIT_MSEC);
> -             if ((state & active_flags) == active_flags)
> +             if (eeh_state_active(state))
>                       break;
>  
>               if (state < 0) {
> @@ -1352,16 +1346,15 @@ static int eeh_pe_change_owner(struct eeh_pe *pe)
>       struct eeh_dev *edev, *tmp;
>       struct pci_dev *pdev;
>       struct pci_device_id *id;
> -     int flags, ret;
> +     int ret;
>  
>       /* Check PE state */
> -     flags = (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
>       ret = eeh_ops->get_state(pe, NULL);
>       if (ret < 0 || ret == EEH_STATE_NOT_SUPPORT)
>               return 0;
>  
>       /* Unfrozen PE, nothing to do */
> -     if ((ret & flags) == flags)
> +     if (eeh_state_active(ret))
>               return 0;
>  
>       /* Frozen PE, check if it needs PE level reset */
> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c 
> b/arch/powerpc/platforms/powernv/eeh-powernv.c
> index 33c86c1a1720..ddfc3544d285 100644
> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
> @@ -1425,11 +1425,8 @@ static int pnv_eeh_get_pe(struct pci_controller *hose,
>       dev_pe = dev_pe->parent;
>       while (dev_pe && !(dev_pe->type & EEH_PE_PHB)) {
>               int ret;
> -             int active_flags = (EEH_STATE_MMIO_ACTIVE |
> -                                 EEH_STATE_DMA_ACTIVE);
> -
>               ret = eeh_ops->get_state(dev_pe, NULL);
> -             if (ret <= 0 || (ret & active_flags) == active_flags) {
> +             if (ret <= 0 || eeh_state_active(ret)) {
>                       dev_pe = dev_pe->parent;
>                       continue;
>               }
> @@ -1463,7 +1460,6 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
>       struct eeh_pe *phb_pe, *parent_pe;
>       __be64 frozen_pe_no;
>       __be16 err_type, severity;
> -     int active_flags = (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
>       long rc;
>       int state, ret = EEH_NEXT_ERR_NONE;
>  
> @@ -1626,8 +1622,7 @@ static int pnv_eeh_next_error(struct eeh_pe **pe)
>  
>                               /* Frozen parent PE ? */
>                               state = eeh_ops->get_state(parent_pe, NULL);
> -                             if (state > 0 &&
> -                                 (state & active_flags) != active_flags)
> +                             if (state > 0 && !eeh_state_active(state))
>                                       *pe = parent_pe;
>  
>                               /* Next parent level */
> 


-- 
Alexey

Reply via email to