[PATCH kernel 4/5] powerpc/eeh: Remove unnecessary config_addr from eeh_dev
Andrew Donnellan
andrew.donnellan at au1.ibm.com
Thu Aug 24 14:55:30 AEST 2017
On 23/08/17 20:19, Alexey Kardashevskiy wrote:
> The eeh_dev struct hold a config space address of an associated node
> and the very same address is also stored in the pci_dn struct which
> is always present during the eeh_dev lifetime.
>
> This uses bus:devfn directly from pci_dn instead of cached and packed
> config_addr.
>
> Since config_addr is made from device's bus:dev.fn, there is no point
> in keeping it in the debugfs either so remove that too.
>
> Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
Reviewed-by: Andrew Donnellan <andrew.donnellan at au1.ibm.com>
> ---
> arch/powerpc/include/asm/eeh.h | 1 -
> arch/powerpc/kernel/eeh_pe.c | 42 ++++++++++++++--------------
> arch/powerpc/kernel/eeh_sysfs.c | 3 --
> arch/powerpc/platforms/powernv/eeh-powernv.c | 9 +++---
> 4 files changed, 26 insertions(+), 29 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h
> index 777d37aa0a7f..9847ae3a12d1 100644
> --- a/arch/powerpc/include/asm/eeh.h
> +++ b/arch/powerpc/include/asm/eeh.h
> @@ -131,7 +131,6 @@ static inline bool eeh_pe_passed(struct eeh_pe *pe)
> struct eeh_dev {
> int mode; /* EEH mode */
> int class_code; /* Class code of the device */
> - int config_addr; /* Config address */
> int pe_config_addr; /* PE config address */
> u32 config_space[16]; /* Saved PCI config space */
> int pcix_cap; /* Saved PCIx capability */
> diff --git a/arch/powerpc/kernel/eeh_pe.c b/arch/powerpc/kernel/eeh_pe.c
> index 419c3f07afd5..2e8d1b2b5af4 100644
> --- a/arch/powerpc/kernel/eeh_pe.c
> +++ b/arch/powerpc/kernel/eeh_pe.c
> @@ -340,11 +340,12 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> {
> struct eeh_pe *pe, *parent;
> struct pci_dn *pdn = eeh_dev_to_pdn(edev);
> + int config_addr = (pdn->busno << 8) | (pdn->devfn);
>
> /* Check if the PE number is valid */
> if (!eeh_has_flag(EEH_VALID_PE_ZERO) && !edev->pe_config_addr) {
> pr_err("%s: Invalid PE#0 for edev 0x%x on PHB#%x\n",
> - __func__, edev->config_addr, pdn->phb->global_number);
> + __func__, config_addr, pdn->phb->global_number);
> return -EINVAL;
> }
>
> @@ -354,8 +355,7 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> * PE should be composed of PCI bus and its subordinate
> * components.
> */
> - pe = eeh_pe_get(pdn->phb, edev->pe_config_addr,
> - edev->config_addr);
> + pe = eeh_pe_get(pdn->phb, edev->pe_config_addr, config_addr);
> if (pe && !(pe->type & EEH_PE_INVALID)) {
> /* Mark the PE as type of PCI bus */
> pe->type = EEH_PE_BUS;
> @@ -365,10 +365,10 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> list_add_tail(&edev->list, &pe->edevs);
> pr_debug("EEH: Add %04x:%02x:%02x.%01x to Bus PE#%x\n",
> pdn->phb->global_number,
> - edev->config_addr >> 8,
> - PCI_SLOT(edev->config_addr & 0xFF),
> - PCI_FUNC(edev->config_addr & 0xFF),
> - pe->addr);
> + pdn->busno,
> + PCI_SLOT(pdn->devfn),
> + PCI_FUNC(pdn->devfn),
> + pe->addr);
> return 0;
> } else if (pe && (pe->type & EEH_PE_INVALID)) {
> list_add_tail(&edev->list, &pe->edevs);
> @@ -388,10 +388,10 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> pr_debug("EEH: Add %04x:%02x:%02x.%01x to Device "
> "PE#%x, Parent PE#%x\n",
> pdn->phb->global_number,
> - edev->config_addr >> 8,
> - PCI_SLOT(edev->config_addr & 0xFF),
> - PCI_FUNC(edev->config_addr & 0xFF),
> - pe->addr, pe->parent->addr);
> + pdn->busno,
> + PCI_SLOT(pdn->devfn),
> + PCI_FUNC(pdn->devfn),
> + pe->addr, pe->parent->addr);
> return 0;
> }
>
> @@ -405,7 +405,7 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> return -ENOMEM;
> }
> pe->addr = edev->pe_config_addr;
> - pe->config_addr = edev->config_addr;
> + pe->config_addr = config_addr;
>
> /*
> * Put the new EEH PE into hierarchy tree. If the parent
> @@ -436,9 +436,9 @@ int eeh_add_to_parent_pe(struct eeh_dev *edev)
> pr_debug("EEH: Add %04x:%02x:%02x.%01x to "
> "Device PE#%x, Parent PE#%x\n",
> pdn->phb->global_number,
> - edev->config_addr >> 8,
> - PCI_SLOT(edev->config_addr & 0xFF),
> - PCI_FUNC(edev->config_addr & 0xFF),
> + pdn->busno,
> + PCI_SLOT(pdn->devfn),
> + PCI_FUNC(pdn->devfn),
> pe->addr, pe->parent->addr);
>
> return 0;
> @@ -462,9 +462,9 @@ int eeh_rmv_from_parent_pe(struct eeh_dev *edev)
> if (!edev->pe) {
> pr_debug("%s: No PE found for device %04x:%02x:%02x.%01x\n",
> __func__, pdn->phb->global_number,
> - edev->config_addr >> 8,
> - PCI_SLOT(edev->config_addr & 0xFF),
> - PCI_FUNC(edev->config_addr & 0xFF));
> + pdn->busno,
> + PCI_SLOT(pdn->devfn),
> + PCI_FUNC(pdn->devfn));
> return -EEXIST;
> }
>
> @@ -725,9 +725,9 @@ static void eeh_bridge_check_link(struct eeh_dev *edev)
>
> pr_debug("%s: Check PCIe link for %04x:%02x:%02x.%01x ...\n",
> __func__, pdn->phb->global_number,
> - edev->config_addr >> 8,
> - PCI_SLOT(edev->config_addr & 0xFF),
> - PCI_FUNC(edev->config_addr & 0xFF));
> + pdn->busno,
> + PCI_SLOT(pdn->devfn),
> + PCI_FUNC(pdn->devfn));
>
> /* Check slot status */
> cap = edev->pcie_cap;
> diff --git a/arch/powerpc/kernel/eeh_sysfs.c b/arch/powerpc/kernel/eeh_sysfs.c
> index 1ceecdda810b..797549289798 100644
> --- a/arch/powerpc/kernel/eeh_sysfs.c
> +++ b/arch/powerpc/kernel/eeh_sysfs.c
> @@ -51,7 +51,6 @@ static ssize_t eeh_show_##_name(struct device *dev, \
> static DEVICE_ATTR(_name, S_IRUGO, eeh_show_##_name, NULL);
>
> EEH_SHOW_ATTR(eeh_mode, mode, "0x%x");
> -EEH_SHOW_ATTR(eeh_config_addr, config_addr, "0x%x");
> EEH_SHOW_ATTR(eeh_pe_config_addr, pe_config_addr, "0x%x");
>
> static ssize_t eeh_pe_state_show(struct device *dev,
> @@ -103,7 +102,6 @@ void eeh_sysfs_add_device(struct pci_dev *pdev)
> return;
>
> rc += device_create_file(&pdev->dev, &dev_attr_eeh_mode);
> - rc += device_create_file(&pdev->dev, &dev_attr_eeh_config_addr);
> rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_config_addr);
> rc += device_create_file(&pdev->dev, &dev_attr_eeh_pe_state);
>
> @@ -128,7 +126,6 @@ void eeh_sysfs_remove_device(struct pci_dev *pdev)
> }
>
> device_remove_file(&pdev->dev, &dev_attr_eeh_mode);
> - device_remove_file(&pdev->dev, &dev_attr_eeh_config_addr);
> device_remove_file(&pdev->dev, &dev_attr_eeh_pe_config_addr);
> device_remove_file(&pdev->dev, &dev_attr_eeh_pe_state);
>
> diff --git a/arch/powerpc/platforms/powernv/eeh-powernv.c b/arch/powerpc/platforms/powernv/eeh-powernv.c
> index 552b0cd4e8ba..8864065eba22 100644
> --- a/arch/powerpc/platforms/powernv/eeh-powernv.c
> +++ b/arch/powerpc/platforms/powernv/eeh-powernv.c
> @@ -352,6 +352,7 @@ static void *pnv_eeh_probe(struct pci_dn *pdn, void *data)
> struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
> uint32_t pcie_flags;
> int ret;
> + int config_addr = (pdn->busno << 8) | (pdn->devfn);
>
> /*
> * When probing the root bridge, which doesn't have any
> @@ -386,8 +387,7 @@ static void *pnv_eeh_probe(struct pci_dn *pdn, void *data)
> }
> }
>
> - edev->config_addr = (pdn->busno << 8) | (pdn->devfn);
> - edev->pe_config_addr = phb->ioda.pe_rmap[edev->config_addr];
> + edev->pe_config_addr = phb->ioda.pe_rmap[config_addr];
>
> /* Create PE */
> ret = eeh_add_to_parent_pe(edev);
> @@ -1699,6 +1699,7 @@ static int pnv_eeh_restore_config(struct pci_dn *pdn)
> struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
> struct pnv_phb *phb;
> s64 ret;
> + int config_addr = (pdn->busno << 8) | (pdn->devfn);
>
> if (!edev)
> return -EEXIST;
> @@ -1715,12 +1716,12 @@ static int pnv_eeh_restore_config(struct pci_dn *pdn)
> } else {
> phb = pdn->phb->private_data;
> ret = opal_pci_reinit(phb->opal_id,
> - OPAL_REINIT_PCI_DEV, edev->config_addr);
> + OPAL_REINIT_PCI_DEV, config_addr);
> }
>
> if (ret) {
> pr_warn("%s: Can't reinit PCI dev 0x%x (%lld)\n",
> - __func__, edev->config_addr, ret);
> + __func__, config_addr, ret);
> return -EIO;
> }
>
>
--
Andrew Donnellan OzLabs, ADL Canberra
andrew.donnellan at au1.ibm.com IBM Australia Limited
More information about the Linuxppc-dev
mailing list