int __exit eeh_ops_unregister(const char *name);
 unsigned long eeh_check_failure(const volatile void __iomem *token,
                                unsigned long val);
-int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev);
+int eeh_dev_check_failure(struct eeh_dev *edev);
 void __init pci_addr_cache_build(void);
 void eeh_add_device_tree_early(struct device_node *);
 void eeh_add_device_tree_late(struct pci_bus *);
        return val;
 }
 
-static inline int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
-{
-       return 0;
-}
+#define eeh_dev_check_failure(x) (0)
 
 static inline void pci_addr_cache_build(void) { }
 
 
 {
        return PCI_DN(dn)->edev;
 }
+#else
+#define of_node_to_eeh_dev(x) (NULL)
 #endif
 
 /** Find the bus corresponding to the indicated device node */
 
 void pci_addr_cache_build(void);
 void pci_addr_cache_insert_device(struct pci_dev *dev);
 void pci_addr_cache_remove_device(struct pci_dev *dev);
-struct pci_dev *pci_addr_cache_get_device(unsigned long addr);
+struct eeh_dev *pci_addr_cache_get_device(unsigned long addr);
 void eeh_slot_error_detail(struct eeh_pe *pe, int severity);
 int eeh_pci_enable(struct eeh_pe *pe, int function);
 int eeh_reset_pe(struct eeh_pe *);
 
                return PCIBIOS_DEVICE_NOT_FOUND;
 
        if (returnval == EEH_IO_ERROR_VALUE(size) &&
-           eeh_dn_check_failure (pdn->node, NULL))
+           eeh_dev_check_failure(of_node_to_eeh_dev(pdn->node)))
                return PCIBIOS_DEVICE_NOT_FOUND;
 
        return PCIBIOS_SUCCESSFUL;
 
 }
 
 /**
- * eeh_dn_check_failure - Check if all 1's data is due to EEH slot freeze
- * @dn: device node
- * @dev: pci device, if known
+ * eeh_dev_check_failure - Check if all 1's data is due to EEH slot freeze
+ * @edev: eeh device
  *
  * Check for an EEH failure for the given device node.  Call this
  * routine if the result of a read was all 0xff's and you want to
  *
  * It is safe to call this routine in an interrupt context.
  */
-int eeh_dn_check_failure(struct device_node *dn, struct pci_dev *dev)
+int eeh_dev_check_failure(struct eeh_dev *edev)
 {
        int ret;
        unsigned long flags;
+       struct device_node *dn;
+       struct pci_dev *dev;
        struct eeh_pe *pe;
-       struct eeh_dev *edev;
        int rc = 0;
        const char *location;
 
        if (!eeh_subsystem_enabled)
                return 0;
 
-       if (dn) {
-               edev = of_node_to_eeh_dev(dn);
-       } else if (dev) {
-               edev = pci_dev_to_eeh_dev(dev);
-               dn = pci_device_to_OF_node(dev);
-       } else {
+       if (!edev) {
                eeh_stats.no_dn++;
                return 0;
        }
+       dn = eeh_dev_to_of_node(edev);
+       dev = eeh_dev_to_pci_dev(edev);
        pe = edev->pe;
 
        /* Access to IO BARs might get this far and still not want checking. */
        return rc;
 }
 
-EXPORT_SYMBOL_GPL(eeh_dn_check_failure);
+EXPORT_SYMBOL_GPL(eeh_dev_check_failure);
 
 /**
  * eeh_check_failure - Check if all 1's data is due to EEH slot freeze
 unsigned long eeh_check_failure(const volatile void __iomem *token, unsigned long val)
 {
        unsigned long addr;
-       struct pci_dev *dev;
-       struct device_node *dn;
+       struct eeh_dev *edev;
 
        /* Finding the phys addr + pci device; this is pretty quick. */
        addr = eeh_token_to_phys((unsigned long __force) token);
-       dev = pci_addr_cache_get_device(addr);
-       if (!dev) {
+       edev = pci_addr_cache_get_device(addr);
+       if (!edev) {
                eeh_stats.no_device++;
                return val;
        }
 
-       dn = pci_device_to_OF_node(dev);
-       eeh_dn_check_failure(dn, dev);
+       eeh_dev_check_failure(edev);
 
-       pci_dev_put(dev);
+       pci_dev_put(eeh_dev_to_pci_dev(edev));
        return val;
 }
 
 
        struct rb_node rb_node;
        unsigned long addr_lo;
        unsigned long addr_hi;
+       struct eeh_dev *edev;
        struct pci_dev *pcidev;
        unsigned int flags;
 };
        spinlock_t piar_lock;
 } pci_io_addr_cache_root;
 
-static inline struct pci_dev *__pci_addr_cache_get_device(unsigned long addr)
+static inline struct eeh_dev *__pci_addr_cache_get_device(unsigned long addr)
 {
        struct rb_node *n = pci_io_addr_cache_root.rb_root.rb_node;
 
                                n = n->rb_right;
                        } else {
                                pci_dev_get(piar->pcidev);
-                               return piar->pcidev;
+                               return piar->edev;
                        }
                }
        }
  * from zero (that is, they do *not* have pci_io_addr added in).
  * It is safe to call this function within an interrupt.
  */
-struct pci_dev *pci_addr_cache_get_device(unsigned long addr)
+struct eeh_dev *pci_addr_cache_get_device(unsigned long addr)
 {
-       struct pci_dev *dev;
+       struct eeh_dev *edev;
        unsigned long flags;
 
        spin_lock_irqsave(&pci_io_addr_cache_root.piar_lock, flags);
-       dev = __pci_addr_cache_get_device(addr);
+       edev = __pci_addr_cache_get_device(addr);
        spin_unlock_irqrestore(&pci_io_addr_cache_root.piar_lock, flags);
-       return dev;
+       return edev;
 }
 
 #ifdef DEBUG
        pci_dev_get(dev);
        piar->addr_lo = alo;
        piar->addr_hi = ahi;
+       piar->edev = pci_dev_to_eeh_dev(dev);
        piar->pcidev = dev;
        piar->flags = flags;