Lines Matching defs:edev

76 static bool eeh_dev_removed(struct eeh_dev *edev)
78 return !edev || (edev->mode & EEH_DEV_REMOVED);
81 static bool eeh_edev_actionable(struct eeh_dev *edev)
83 if (!edev->pdev)
85 if (edev->pdev->error_state == pci_channel_io_perm_failure)
87 if (eeh_dev_removed(edev))
89 if (eeh_pe_passed(edev->pe))
140 static void eeh_disable_irq(struct eeh_dev *edev)
146 if (edev->pdev->msi_enabled || edev->pdev->msix_enabled)
149 if (!irq_has_action(edev->pdev->irq))
152 edev->mode |= EEH_DEV_IRQ_DISABLED;
153 disable_irq_nosync(edev->pdev->irq);
163 static void eeh_enable_irq(struct eeh_dev *edev)
165 if ((edev->mode) & EEH_DEV_IRQ_DISABLED) {
166 edev->mode &= ~EEH_DEV_IRQ_DISABLED;
187 if (irqd_irq_disabled(irq_get_irq_data(edev->pdev->irq)))
188 enable_irq(edev->pdev->irq);
192 static void eeh_dev_save_state(struct eeh_dev *edev, void *userdata)
196 if (!edev)
206 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED))
209 pdev = eeh_dev_to_pci_dev(edev);
219 struct eeh_dev *edev, *tmp;
222 eeh_pe_for_each_dev(pe, edev, tmp)
223 if (eeh_edev_actionable(edev))
224 edev->pdev->error_state = s;
230 struct eeh_dev *edev, *tmp;
233 eeh_pe_for_each_dev(pe, edev, tmp) {
234 if (!eeh_edev_actionable(edev))
237 if (!eeh_pcid_get(edev->pdev))
241 eeh_enable_irq(edev);
243 eeh_disable_irq(edev);
245 eeh_pcid_put(edev->pdev);
253 static void eeh_pe_report_edev(struct eeh_dev *edev, eeh_report_fn fn,
261 pdev = edev->pdev;
266 eeh_edev_info(edev, "no device");
270 if (eeh_edev_actionable(edev)) {
274 eeh_edev_info(edev, "no driver");
276 eeh_edev_info(edev, "driver not EEH aware");
277 else if (edev->mode & EEH_DEV_NO_HANDLER)
278 eeh_edev_info(edev, "driver bound too late");
280 new_result = fn(edev, pdev, driver);
281 eeh_edev_info(edev, "%s driver reports: '%s'",
291 eeh_edev_info(edev, "not actionable (%d,%d,%d)", !!pdev,
292 !eeh_dev_removed(edev), !eeh_pe_passed(edev->pe));
295 if (edev->pdev != pdev)
296 eeh_edev_warn(edev, "Device changed during processing!\n");
304 struct eeh_dev *edev, *tmp;
307 eeh_for_each_pe(root, pe) eeh_pe_for_each_dev(pe, edev, tmp)
308 eeh_pe_report_edev(edev, fn, result);
318 * @edev: eeh device
323 static enum pci_ers_result eeh_report_error(struct eeh_dev *edev,
332 eeh_edev_info(edev, "Invoking %s->error_detected(IO frozen)",
336 edev->in_error = true;
343 * @edev: eeh device
349 static enum pci_ers_result eeh_report_mmio_enabled(struct eeh_dev *edev,
355 eeh_edev_info(edev, "Invoking %s->mmio_enabled()", driver->name);
361 * @edev: eeh device
369 static enum pci_ers_result eeh_report_reset(struct eeh_dev *edev,
373 if (!driver->err_handler->slot_reset || !edev->in_error)
375 eeh_edev_info(edev, "Invoking %s->slot_reset()", driver->name);
379 static void eeh_dev_restore_state(struct eeh_dev *edev, void *userdata)
383 if (!edev)
392 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) {
393 if (list_is_last(&edev->entry, &edev->pe->edevs))
394 eeh_pe_restore_bars(edev->pe);
399 pdev = eeh_dev_to_pci_dev(edev);
408 * @edev: eeh device
415 static enum pci_ers_result eeh_report_resume(struct eeh_dev *edev,
419 if (!driver->err_handler->resume || !edev->in_error)
422 eeh_edev_info(edev, "Invoking %s->resume()", driver->name);
425 pci_uevent_ers(edev->pdev, PCI_ERS_RESULT_RECOVERED);
428 eeh_ops->notify_resume(edev);
435 * @edev: eeh device
441 static enum pci_ers_result eeh_report_failure(struct eeh_dev *edev,
450 eeh_edev_info(edev, "Invoking %s->error_detected(permanent failure)",
459 static void *eeh_add_virt_device(struct eeh_dev *edev)
462 struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
464 if (!(edev->physfn)) {
465 eeh_edev_warn(edev, "Not for VF\n");
479 pci_iov_add_virtfn(edev->physfn, edev->vf_index);
484 static void eeh_rmv_device(struct eeh_dev *edev, void *userdata)
487 struct pci_dev *dev = eeh_dev_to_pci_dev(edev);
497 if (!eeh_edev_actionable(edev) ||
517 edev->mode |= EEH_DEV_DISCONNECTED;
521 if (edev->physfn) {
523 pci_iov_remove_virtfn(edev->physfn, edev->vf_index);
524 edev->pdev = NULL;
527 list_add(&edev->rmv_entry, &rmv_data->removed_vf_list);
537 struct eeh_dev *edev, *tmp;
539 eeh_pe_for_each_dev(pe, edev, tmp) {
540 if (!(edev->mode & EEH_DEV_DISCONNECTED))
543 edev->mode &= ~(EEH_DEV_DISCONNECTED | EEH_DEV_IRQ_DISABLED);
544 eeh_pe_tree_remove(edev);
629 struct eeh_dev *edev;
697 edev = list_first_entry(&pe->edevs, struct eeh_dev, entry);
700 eeh_add_virt_device(edev);
838 struct eeh_dev *edev, *tmp;
863 eeh_pe_for_each_dev(tmp_pe, edev, tmp)
864 if (eeh_slot_presence_check(edev->pdev))
917 eeh_pe_for_each_dev(tmp_pe, edev, tmp)
918 edev->mode &= ~EEH_DEV_NO_HANDLER;
1042 list_for_each_entry_safe(edev, tmp, &rmv_data.removed_vf_list,
1044 eeh_add_virt_device(edev);
1045 list_del(&edev->rmv_entry);
1054 eeh_pe_for_each_dev(tmp_pe, edev, tmp) {
1055 edev->mode &= ~EEH_DEV_NO_HANDLER;
1056 edev->in_error = false;
1113 eeh_pe_for_each_dev(tmp_pe, edev, tmp)
1114 eeh_clear_slot_attention(edev->pdev);
1129 struct eeh_dev *edev, *tmp_edev;
1192 eeh_pe_for_each_dev(tmp_pe, edev, tmp_edev)
1193 edev->mode &= ~EEH_DEV_NO_HANDLER;