pci_dma_dev_setup_pSeriesLP() should use of_get_next_parent() to safely
iterate through the parent nodes.

Signed-off-by: Michael Ellerman <[EMAIL PROTECTED]>
---
 arch/powerpc/platforms/pseries/iommu.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/platforms/pseries/iommu.c 
b/arch/powerpc/platforms/pseries/iommu.c
index 5e9430e..ef1aa8d 100644
--- a/arch/powerpc/platforms/pseries/iommu.c
+++ b/arch/powerpc/platforms/pseries/iommu.c
@@ -503,8 +503,9 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
        dn = pci_device_to_OF_node(dev);
        DBG("  node is %s\n", dn->full_name);
 
-       for (pdn = dn; pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table;
-            pdn = pdn->parent) {
+       for (pdn = of_node_get(dn);
+            pdn && PCI_DN(pdn) && !PCI_DN(pdn)->iommu_table;
+            pdn = of_get_next_parent(pdn)) {
                dma_window = of_get_property(pdn, "ibm,dma-window", NULL);
                if (dma_window)
                        break;
@@ -514,7 +515,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
                printk(KERN_WARNING "pci_dma_dev_setup_pSeriesLP: "
                       "no DMA window found for pci dev=%s dn=%s\n",
                                 pci_name(dev), dn? dn->full_name : "<null>");
-               return;
+               goto out_put;
        }
        DBG("  parent is %s\n", pdn->full_name);
 
@@ -524,7 +525,7 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
        if (dma_window == NULL || pdn->parent == NULL) {
                DBG("  no dma window for device, linking to parent\n");
                dev->dev.archdata.dma_data = PCI_DN(pdn)->iommu_table;
-               return;
+               goto out_put;
        }
 
        pci = PCI_DN(pdn);
@@ -544,6 +545,9 @@ static void pci_dma_dev_setup_pSeriesLP(struct pci_dev *dev)
        }
 
        dev->dev.archdata.dma_data = pci->iommu_table;
+
+out_put:
+       of_node_put(pdn);
 }
 #else  /* CONFIG_PCI */
 #define pci_dma_bus_setup_pSeries      NULL
-- 
1.5.2.rc1.1884.g59b20

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to