edev
static void eeh_pe_report_edev(struct eeh_dev *edev, eeh_report_fn fn,
eeh_edev_info(edev, "no device");
eeh_edev_info(edev, "no driver");
eeh_edev_info(edev, "driver not EEH aware");
eeh_edev_info(edev, "driver bound too late");
new_result = fn(edev, pdev, driver);
eeh_edev_info(edev, "%s driver reports: '%s'",
eeh_edev_info(edev, "not actionable (%d,%d,%d)", !!pdev,
eeh_edev_warn(edev, "Device changed during processing!\n");
struct eeh_dev *edev, *tmp;
eeh_pe_for_each_dev(pe, edev, tmp)
eeh_pe_report_edev(edev, fn, result);
static enum pci_ers_result eeh_report_error(struct eeh_dev *edev,
eeh_edev_info(edev, "Invoking %s->error_detected(IO frozen)",
static enum pci_ers_result eeh_report_mmio_enabled(struct eeh_dev *edev,
eeh_edev_info(edev, "Invoking %s->mmio_enabled()", driver->name);
static enum pci_ers_result eeh_report_reset(struct eeh_dev *edev,
eeh_edev_info(edev, "Invoking %s->slot_reset()", driver->name);
static void eeh_dev_restore_state(struct eeh_dev *edev, void *userdata)
return;
pdev = eeh_dev_to_pci_dev(edev);
static enum pci_ers_result eeh_report_resume(struct eeh_dev *edev,
eeh_edev_info(edev, "Invoking %s->resume()", driver->name);
eeh_ops->notify_resume(edev);
static enum pci_ers_result eeh_report_failure(struct eeh_dev *edev,
eeh_edev_info(edev, "Invoking %s->error_detected(permanent failure)",
struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
eeh_edev_warn(edev, "Not for VF\n");
static void eeh_rmv_device(struct eeh_dev *edev, void *userdata)
struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
struct eeh_dev *edev, *tmp;
eeh_pe_for_each_dev(pe, edev, tmp) {
eeh_pe_tree_remove(edev);