Lines Matching refs:pe
89 if (eeh_pe_passed(edev->pe)) in eeh_edev_actionable()
206 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) in eeh_dev_save_state()
218 struct eeh_pe *pe; in eeh_set_channel_state() local
221 eeh_for_each_pe(root, pe) in eeh_set_channel_state()
222 eeh_pe_for_each_dev(pe, edev, tmp) in eeh_set_channel_state()
229 struct eeh_pe *pe; in eeh_set_irq_state() local
232 eeh_for_each_pe(root, pe) { in eeh_set_irq_state()
233 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_set_irq_state()
291 !eeh_dev_removed(edev), !eeh_pe_passed(edev->pe)); in eeh_pe_report_edev()
302 struct eeh_pe *pe; in eeh_pe_report() local
306 eeh_for_each_pe(root, pe) in eeh_pe_report()
307 eeh_pe_for_each_dev(pe, edev, tmp) in eeh_pe_report()
394 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) { in eeh_dev_restore_state()
395 if (list_is_last(&edev->entry, &edev->pe->edevs)) in eeh_dev_restore_state()
396 eeh_pe_restore_bars(edev->pe); in eeh_dev_restore_state()
542 static void *eeh_pe_detach_dev(struct eeh_pe *pe, void *userdata) in eeh_pe_detach_dev() argument
546 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_pe_detach_dev()
566 struct eeh_pe *pe; in eeh_clear_pe_frozen_state() local
569 eeh_for_each_pe(root, pe) { in eeh_clear_pe_frozen_state()
570 if (include_passed || !eeh_pe_passed(pe)) { in eeh_clear_pe_frozen_state()
572 if (!eeh_unfreeze_pe(pe)) in eeh_clear_pe_frozen_state()
582 int eeh_pe_reset_and_recover(struct eeh_pe *pe) in eeh_pe_reset_and_recover() argument
587 if (pe->state & EEH_PE_RECOVERING) in eeh_pe_reset_and_recover()
591 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
594 eeh_pe_dev_traverse(pe, eeh_dev_save_state, NULL); in eeh_pe_reset_and_recover()
597 ret = eeh_pe_reset_full(pe, true); in eeh_pe_reset_and_recover()
599 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
604 ret = eeh_clear_pe_frozen_state(pe, true); in eeh_pe_reset_and_recover()
606 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
611 eeh_pe_dev_traverse(pe, eeh_dev_restore_state, NULL); in eeh_pe_reset_and_recover()
614 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
630 static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus, in eeh_reset_device() argument
640 eeh_for_each_pe(pe, tmp_pe) in eeh_reset_device()
644 cnt = pe->freeze_count; in eeh_reset_device()
645 tstamp = pe->tstamp; in eeh_reset_device()
653 eeh_pe_state_mark(pe, EEH_PE_KEEP); in eeh_reset_device()
654 if (any_passed || driver_eeh_aware || (pe->type & EEH_PE_VF)) { in eeh_reset_device()
655 eeh_pe_dev_traverse(pe, eeh_rmv_device, rmv_data); in eeh_reset_device()
669 rc = eeh_pe_reset_full(pe, false); in eeh_reset_device()
674 eeh_ops->configure_bridge(pe); in eeh_reset_device()
675 eeh_pe_restore_bars(pe); in eeh_reset_device()
678 rc = eeh_clear_pe_frozen_state(pe, false); in eeh_reset_device()
699 edev = list_first_entry(&pe->edevs, struct eeh_dev, entry); in eeh_reset_device()
700 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
701 if (pe->type & EEH_PE_VF) { in eeh_reset_device()
705 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_reset_device()
709 eeh_pe_state_clear(pe, EEH_PE_KEEP, true); in eeh_reset_device()
711 pe->tstamp = tstamp; in eeh_reset_device()
712 pe->freeze_count = cnt; in eeh_reset_device()
730 static void eeh_pe_cleanup(struct eeh_pe *pe) in eeh_pe_cleanup() argument
734 list_for_each_entry_safe(child_pe, tmp, &pe->child_list, child) in eeh_pe_cleanup()
737 if (pe->state & EEH_PE_KEEP) in eeh_pe_cleanup()
740 if (!(pe->state & EEH_PE_INVALID)) in eeh_pe_cleanup()
743 if (list_empty(&pe->edevs) && list_empty(&pe->child_list)) { in eeh_pe_cleanup()
744 list_del(&pe->child); in eeh_pe_cleanup()
745 kfree(pe); in eeh_pe_cleanup()
836 void eeh_handle_normal_event(struct eeh_pe *pe) in eeh_handle_normal_event() argument
849 bus = eeh_pe_bus_get(pe); in eeh_handle_normal_event()
852 __func__, pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
866 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
873 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
887 if (pe->type & EEH_PE_PHB) { in eeh_handle_normal_event()
889 pe->phb->global_number, eeh_pe_loc_get(pe)); in eeh_handle_normal_event()
891 struct eeh_pe *phb_pe = eeh_phb_pe_get(pe->phb); in eeh_handle_normal_event()
894 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
896 eeh_pe_loc_get(pe), eeh_pe_loc_get(phb_pe)); in eeh_handle_normal_event()
904 if (pe->trace_entries) { in eeh_handle_normal_event()
905 void **ptrs = (void **) pe->stack_trace; in eeh_handle_normal_event()
909 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
913 for (i = 0; i < pe->trace_entries; i++) in eeh_handle_normal_event()
916 pe->trace_entries = 0; in eeh_handle_normal_event()
920 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
924 eeh_pe_update_time_stamp(pe); in eeh_handle_normal_event()
925 pe->freeze_count++; in eeh_handle_normal_event()
926 if (pe->freeze_count > eeh_max_freezes) { in eeh_handle_normal_event()
928 pe->phb->global_number, pe->addr, in eeh_handle_normal_event()
929 pe->freeze_count); in eeh_handle_normal_event()
945 pe->freeze_count, eeh_max_freezes); in eeh_handle_normal_event()
947 eeh_set_channel_state(pe, pci_channel_io_frozen); in eeh_handle_normal_event()
948 eeh_set_irq_state(pe, false); in eeh_handle_normal_event()
949 eeh_pe_report("error_detected(IO frozen)", pe, in eeh_handle_normal_event()
958 if ((pe->type & EEH_PE_PHB) && result != PCI_ERS_RESULT_NONE) in eeh_handle_normal_event()
964 rc = eeh_wait_state(pe, MAX_WAIT_FOR_RECOVERY * 1000); in eeh_handle_normal_event()
975 eeh_slot_error_detail(pe, EEH_LOG_TEMP); in eeh_handle_normal_event()
983 rc = eeh_reset_device(pe, bus, NULL, false); in eeh_handle_normal_event()
993 rc = eeh_pci_enable(pe, EEH_OPT_THAW_MMIO); in eeh_handle_normal_event()
1001 eeh_pe_report("mmio_enabled", pe, in eeh_handle_normal_event()
1007 rc = eeh_pci_enable(pe, EEH_OPT_THAW_DMA); in eeh_handle_normal_event()
1019 eeh_pe_state_clear(pe, EEH_PE_ISOLATED, true); in eeh_handle_normal_event()
1027 rc = eeh_reset_device(pe, bus, &rmv_data, true); in eeh_handle_normal_event()
1034 eeh_set_channel_state(pe, pci_channel_io_normal); in eeh_handle_normal_event()
1035 eeh_set_irq_state(pe, true); in eeh_handle_normal_event()
1036 eeh_pe_report("slot_reset", pe, eeh_report_reset, in eeh_handle_normal_event()
1054 eeh_set_channel_state(pe, pci_channel_io_normal); in eeh_handle_normal_event()
1055 eeh_set_irq_state(pe, true); in eeh_handle_normal_event()
1056 eeh_pe_report("resume", pe, eeh_report_resume, NULL); in eeh_handle_normal_event()
1057 eeh_for_each_pe(pe, tmp_pe) { in eeh_handle_normal_event()
1076 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
1078 eeh_slot_error_detail(pe, EEH_LOG_PERM); in eeh_handle_normal_event()
1081 eeh_set_irq_state(pe, false); in eeh_handle_normal_event()
1082 eeh_pe_report("error_detected(permanent failure)", pe, in eeh_handle_normal_event()
1084 eeh_set_channel_state(pe, pci_channel_io_perm_failure); in eeh_handle_normal_event()
1087 eeh_pe_state_mark(pe, EEH_PE_REMOVED); in eeh_handle_normal_event()
1094 if (pe->type & EEH_PE_VF) { in eeh_handle_normal_event()
1095 eeh_pe_dev_traverse(pe, eeh_rmv_device, NULL); in eeh_handle_normal_event()
1096 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
1098 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_handle_normal_event()
1099 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
1101 bus = eeh_pe_bus_get(pe); in eeh_handle_normal_event()
1106 __func__, pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
1118 eeh_pe_cleanup(pe); in eeh_handle_normal_event()
1121 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
1125 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_handle_normal_event()
1139 struct eeh_pe *pe, *phb_pe, *tmp_pe; in eeh_handle_special_event() local
1149 rc = eeh_ops->next_error(&pe); in eeh_handle_special_event()
1176 eeh_remove_event(pe, true); in eeh_handle_special_event()
1179 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
1180 eeh_pe_mark_isolated(pe); in eeh_handle_special_event()
1202 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
1204 eeh_handle_normal_event(pe); in eeh_handle_special_event()
1207 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_special_event()
1212 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_handle_special_event()
1214 "error_detected(permanent failure)", pe, in eeh_handle_special_event()
1216 eeh_set_channel_state(pe, pci_channel_io_perm_failure); in eeh_handle_special_event()
1230 pe->phb->global_number, in eeh_handle_special_event()
1231 pe->addr); in eeh_handle_special_event()