int ret;
        int active_flags = (EEH_STATE_MMIO_ACTIVE | EEH_STATE_DMA_ACTIVE);
        unsigned long flags;
-       struct pci_dn *pdn;
+       struct device_node *dn;
        struct pci_dev *dev;
        struct eeh_pe *pe, *parent_pe, *phb_pe;
        int rc = 0;
        if (pe->state & EEH_PE_ISOLATED) {
                pe->check_count++;
                if (pe->check_count % EEH_MAX_FAILS == 0) {
-                       pdn = eeh_dev_to_pdn(edev);
-                       if (pdn->node)
-                               location = of_get_property(pdn->node, "ibm,loc-code", NULL);
+                       dn = pci_device_to_OF_node(dev);
+                       if (dn)
+                               location = of_get_property(dn, "ibm,loc-code",
+                                               NULL);
                        printk(KERN_ERR "EEH: %d reads ignored for recovering device at "
                                "location=%s driver=%s pci addr=%s\n",
                                pe->check_count,
 
 void pci_remove_device_node_info(struct device_node *dn)
 {
        struct pci_dn *pdn = dn ? PCI_DN(dn) : NULL;
+       struct device_node *parent;
 #ifdef CONFIG_EEH
        struct eeh_dev *edev = pdn_to_eeh_dev(pdn);
 
 
        WARN_ON(!list_empty(&pdn->child_list));
        list_del(&pdn->list);
-       if (pdn->parent)
-               of_node_put(pdn->parent->node);
+
+       parent = of_get_parent(dn);
+       if (parent)
+               of_node_put(parent);
 
        dn->data = NULL;
        kfree(pdn);