On 20/11/2019 12:28, Oliver O'Halloran wrote:
> Despite the name this function is generic PowerNV PCI code rather than 
> anything
> EEH specific. Convert to take a phb and bdfn rather than a pci_dn.
> 
> Signed-off-by: Oliver O'Halloran <ooh...@gmail.com>
> ---
>  arch/powerpc/platforms/powernv/pci.c | 32 ++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/powernv/pci.c 
> b/arch/powerpc/platforms/powernv/pci.c
> index 6170677bfdc7..50142ff045ac 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -591,9 +591,15 @@ static void pnv_pci_handle_eeh_config(struct pnv_phb 
> *phb, u32 pe_no)
>       spin_unlock_irqrestore(&phb->lock, flags);
>  }
>  
> -static void pnv_pci_config_check_eeh(struct pci_dn *pdn)
> +/*
> + * This, very strangely named, function checks if a config access
> + * caused an EEH and un-freezes the PE if it did. This is mainly
> + * for the !CONFIG_EEH case where nothing is going to un-freeze
> + * it for us.
> + */

Rather than writing a comment like this, simply rename it to
pnv_pci_cfg_check_and_unfreeze() or similar as you are changing
callsites anyway. Thanks,



> +static void pnv_pci_config_check_eeh(struct pnv_phb *phb, u16 bdfn)


>  {
> -     struct pnv_phb *phb = pdn->phb->private_data;
> +     struct pnv_ioda_pe *ioda_pe;
>       u8      fstate = 0;
>       __be16  pcierr = 0;
>       unsigned int pe_no;
> @@ -604,10 +610,11 @@ static void pnv_pci_config_check_eeh(struct pci_dn *pdn)
>        * setup that yet. So all ER errors should be mapped to
>        * reserved PE.
>        */
> -     pe_no = pdn->pe_number;
> -     if (pe_no == IODA_INVALID_PE) {
> +     ioda_pe = __pnv_ioda_get_pe(phb, bdfn);
> +     if (ioda_pe)
> +             pe_no = ioda_pe->pe_number;
> +     else
>               pe_no = phb->ioda.reserved_pe_idx;
> -     }
>  
>       /*
>        * Fetch frozen state. If the PHB support compound PE,
> @@ -629,7 +636,7 @@ static void pnv_pci_config_check_eeh(struct pci_dn *pdn)
>       }
>  
>       pr_devel(" -> EEH check, bdfn=%04x PE#%x fstate=%x\n",
> -              (pdn->busno << 8) | (pdn->devfn), pe_no, fstate);
> +              bdfn, pe_no, fstate);
>  
>       /* Clear the frozen state if applicable */
>       if (fstate == OPAL_EEH_STOPPED_MMIO_FREEZE ||
> @@ -642,6 +649,7 @@ static void pnv_pci_config_check_eeh(struct pci_dn *pdn)
>               if (phb->freeze_pe)
>                       phb->freeze_pe(phb, pe_no);
>  
> +             /* fish out the EEH log and send an EEH event. */
>               pnv_pci_handle_eeh_config(phb, pe_no);
>       }
>  }
> @@ -735,7 +743,8 @@ static int pnv_pci_read_config(struct pci_bus *bus,
>                              int where, int size, u32 *val)
>  {
>       struct pci_dn *pdn;
> -     struct pnv_phb *phb;
> +     struct pnv_phb *phb = pci_bus_to_pnvhb(bus);
> +     u16 bdfn = bus->number << 8 | devfn;
>       struct eeh_dev *edev;
>       int ret;
>  
> @@ -755,7 +764,7 @@ static int pnv_pci_read_config(struct pci_bus *bus,
>                   eeh_dev_check_failure(edev))
>                          return PCIBIOS_DEVICE_NOT_FOUND;
>       } else {
> -             pnv_pci_config_check_eeh(pdn);
> +             pnv_pci_config_check_eeh(phb, bdfn);
>       }
>  
>       return ret;
> @@ -766,7 +775,8 @@ static int pnv_pci_write_config(struct pci_bus *bus,
>                               int where, int size, u32 val)
>  {
>       struct pci_dn *pdn;
> -     struct pnv_phb *phb;
> +     struct pnv_phb *phb = pci_bus_to_pnvhb(bus);
> +     u16 bdfn = bus->number << 8 | devfn;
>       struct eeh_dev *edev;
>       int ret;
>  
> @@ -779,9 +789,9 @@ static int pnv_pci_write_config(struct pci_bus *bus,
>               return PCIBIOS_DEVICE_NOT_FOUND;
>  
>       ret = pnv_pci_cfg_write(pdn, where, size, val);
> -     phb = pdn->phb->private_data;
> +
>       if (!(phb->flags & PNV_PHB_FLAG_EEH))
> -             pnv_pci_config_check_eeh(pdn);
> +             pnv_pci_config_check_eeh(phb, bdfn);
>  
>       return ret;
>  }
> 

-- 
Alexey

Reply via email to