powerpc/pci: Remove OF node back pointer from pci_dn
authorAlexey Kardashevskiy <aik@ozlabs.ru>
Tue, 29 Aug 2017 07:34:04 +0000 (17:34 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 31 Aug 2017 04:26:12 +0000 (14:26 +1000)
The check_req() helper uses pci_get_pdn() to get an OF node pointer.
pci_get_pdn() returns a pci_dn pointer which either:
1) from the OF node returned by pci_device_to_OF_node();
2) from the parent child_list where entries don't have OF node pointers.
Since check_req() does not care about 2), it can call
pci_device_to_OF_node() directly, hence the change.

The find_pe_dn() helper uses embedded pci_dn to get an OF node which is
also stored in edev->pdev so let's take a shortcut and call
pci_device_to_OF_node() directly.

With these 2 changes, we can finally get rid of the OF node back pointer.

Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/pci-bridge.h
arch/powerpc/kernel/pci_dn.c
arch/powerpc/platforms/pseries/msi.c

index 56c67d3..0b8aa1f 100644 (file)
@@ -195,7 +195,6 @@ struct pci_dn {
        struct  pci_dn *parent;
        struct  pci_controller *phb;    /* for pci devices */
        struct  iommu_table_group *table_group; /* for phb's or bridges */
-       struct  device_node *node;      /* back-pointer to the device_node */
 
        int     pci_ext_config_space;   /* for pci devices */
 
index dfb1076..0e395af 100644 (file)
@@ -293,7 +293,6 @@ struct pci_dn *pci_add_device_node_info(struct pci_controller *hose,
        if (pdn == NULL)
                return NULL;
        dn->data = pdn;
-       pdn->node = dn;
        pdn->phb = hose;
 #ifdef CONFIG_PPC_POWERNV
        pdn->pe_number = IODA_INVALID_PE;
index 353912e..b749694 100644 (file)
@@ -132,15 +132,10 @@ static void rtas_teardown_msi_irqs(struct pci_dev *pdev)
 static int check_req(struct pci_dev *pdev, int nvec, char *prop_name)
 {
        struct device_node *dn;
-       struct pci_dn *pdn;
        const __be32 *p;
        u32 req_msi;
 
-       pdn = pci_get_pdn(pdev);
-       if (!pdn)
-               return -ENODEV;
-
-       dn = pdn->node;
+       dn = pci_device_to_OF_node(pdev);
 
        p = of_get_property(dn, prop_name, NULL);
        if (!p) {
@@ -197,7 +192,6 @@ static struct device_node *find_pe_total_msi(struct pci_dev *dev, int *total)
 static struct device_node *find_pe_dn(struct pci_dev *dev, int *total)
 {
        struct device_node *dn;
-       struct pci_dn *pdn;
        struct eeh_dev *edev;
 
        /* Found our PE and assume 8 at that point. */
@@ -210,8 +204,7 @@ static struct device_node *find_pe_dn(struct pci_dev *dev, int *total)
        edev = pdn_to_eeh_dev(PCI_DN(dn));
        if (edev->pe)
                edev = list_first_entry(&edev->pe->edevs, struct eeh_dev, list);
-       pdn = eeh_dev_to_pdn(edev);
-       dn = pdn ? pdn->node : NULL;
+       dn = pci_device_to_OF_node(edev->pdev);
        if (!dn)
                return NULL;