Lines Matching refs:pe
106 if (eeh_pe_passed(edev->pe)) in eeh_edev_actionable()
223 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) in eeh_dev_save_state()
235 struct eeh_pe *pe; in eeh_set_channel_state() local
238 eeh_for_each_pe(root, pe) in eeh_set_channel_state()
239 eeh_pe_for_each_dev(pe, edev, tmp) in eeh_set_channel_state()
246 struct eeh_pe *pe; in eeh_set_irq_state() local
249 eeh_for_each_pe(root, pe) { in eeh_set_irq_state()
250 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_set_irq_state()
309 !eeh_dev_removed(edev), !eeh_pe_passed(edev->pe)); in eeh_pe_report_edev()
320 struct eeh_pe *pe; in eeh_pe_report() local
324 eeh_for_each_pe(root, pe) eeh_pe_for_each_dev(pe, edev, tmp) in eeh_pe_report()
409 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) { in eeh_dev_restore_state()
410 if (list_is_last(&edev->entry, &edev->pe->edevs)) in eeh_dev_restore_state()
411 eeh_pe_restore_bars(edev->pe); in eeh_dev_restore_state()
560 static void *eeh_pe_detach_dev(struct eeh_pe *pe, void *userdata) in eeh_pe_detach_dev() argument
564 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_pe_detach_dev()
584 struct eeh_pe *pe; in eeh_clear_pe_frozen_state() local
587 eeh_for_each_pe(root, pe) { in eeh_clear_pe_frozen_state()
588 if (include_passed || !eeh_pe_passed(pe)) { in eeh_clear_pe_frozen_state()
590 if (!eeh_unfreeze_pe(pe)) in eeh_clear_pe_frozen_state()
600 int eeh_pe_reset_and_recover(struct eeh_pe *pe) in eeh_pe_reset_and_recover() argument
605 if (pe->state & EEH_PE_RECOVERING) in eeh_pe_reset_and_recover()
609 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
612 eeh_pe_dev_traverse(pe, eeh_dev_save_state, NULL); in eeh_pe_reset_and_recover()
615 ret = eeh_pe_reset_full(pe, true); in eeh_pe_reset_and_recover()
617 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
622 ret = eeh_clear_pe_frozen_state(pe, true); in eeh_pe_reset_and_recover()
624 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
629 eeh_pe_dev_traverse(pe, eeh_dev_restore_state, NULL); in eeh_pe_reset_and_recover()
632 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_pe_reset_and_recover()
648 static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus, in eeh_reset_device() argument
658 eeh_for_each_pe(pe, tmp_pe) in eeh_reset_device()
662 cnt = pe->freeze_count; in eeh_reset_device()
663 tstamp = pe->tstamp; in eeh_reset_device()
671 eeh_pe_state_mark(pe, EEH_PE_KEEP); in eeh_reset_device()
672 if (any_passed || driver_eeh_aware || (pe->type & EEH_PE_VF)) { in eeh_reset_device()
673 eeh_pe_dev_traverse(pe, eeh_rmv_device, rmv_data); in eeh_reset_device()
689 rc = eeh_pe_reset_full(pe, false); in eeh_reset_device()
696 eeh_ops->configure_bridge(pe); in eeh_reset_device()
697 eeh_pe_restore_bars(pe); in eeh_reset_device()
700 rc = eeh_clear_pe_frozen_state(pe, false); in eeh_reset_device()
722 edev = list_first_entry(&pe->edevs, struct eeh_dev, entry); in eeh_reset_device()
723 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
724 if (pe->type & EEH_PE_VF) { in eeh_reset_device()
728 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_reset_device()
732 eeh_pe_state_clear(pe, EEH_PE_KEEP, true); in eeh_reset_device()
734 pe->tstamp = tstamp; in eeh_reset_device()
735 pe->freeze_count = cnt; in eeh_reset_device()
754 static void eeh_pe_cleanup(struct eeh_pe *pe) in eeh_pe_cleanup() argument
758 list_for_each_entry_safe(child_pe, tmp, &pe->child_list, child) in eeh_pe_cleanup()
761 if (pe->state & EEH_PE_KEEP) in eeh_pe_cleanup()
764 if (!(pe->state & EEH_PE_INVALID)) in eeh_pe_cleanup()
767 if (list_empty(&pe->edevs) && list_empty(&pe->child_list)) { in eeh_pe_cleanup()
768 list_del(&pe->child); in eeh_pe_cleanup()
769 kfree(pe); in eeh_pe_cleanup()
860 void eeh_handle_normal_event(struct eeh_pe *pe) in eeh_handle_normal_event() argument
871 bus = eeh_pe_bus_get(pe); in eeh_handle_normal_event()
874 __func__, pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
887 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
894 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
899 if (pe->type & EEH_PE_PHB) { in eeh_handle_normal_event()
901 pe->phb->global_number, eeh_pe_loc_get(pe)); in eeh_handle_normal_event()
903 struct eeh_pe *phb_pe = eeh_phb_pe_get(pe->phb); in eeh_handle_normal_event()
906 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
908 eeh_pe_loc_get(pe), eeh_pe_loc_get(phb_pe)); in eeh_handle_normal_event()
916 if (pe->trace_entries) { in eeh_handle_normal_event()
917 void **ptrs = (void **) pe->stack_trace; in eeh_handle_normal_event()
921 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
925 for (i = 0; i < pe->trace_entries; i++) in eeh_handle_normal_event()
928 pe->trace_entries = 0; in eeh_handle_normal_event()
932 eeh_pe_update_time_stamp(pe); in eeh_handle_normal_event()
933 pe->freeze_count++; in eeh_handle_normal_event()
934 if (pe->freeze_count > eeh_max_freezes) { in eeh_handle_normal_event()
936 pe->phb->global_number, pe->addr, in eeh_handle_normal_event()
937 pe->freeze_count); in eeh_handle_normal_event()
941 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
957 pe->freeze_count, eeh_max_freezes); in eeh_handle_normal_event()
959 eeh_set_channel_state(pe, pci_channel_io_frozen); in eeh_handle_normal_event()
960 eeh_set_irq_state(pe, false); in eeh_handle_normal_event()
961 eeh_pe_report("error_detected(IO frozen)", pe, in eeh_handle_normal_event()
963 if ((pe->type & EEH_PE_PHB) && in eeh_handle_normal_event()
973 rc = eeh_wait_state(pe, MAX_WAIT_FOR_RECOVERY*1000); in eeh_handle_normal_event()
986 eeh_slot_error_detail(pe, EEH_LOG_TEMP); in eeh_handle_normal_event()
995 rc = eeh_reset_device(pe, bus, NULL, false); in eeh_handle_normal_event()
1006 rc = eeh_pci_enable(pe, EEH_OPT_THAW_MMIO); in eeh_handle_normal_event()
1014 eeh_pe_report("mmio_enabled", pe, in eeh_handle_normal_event()
1022 rc = eeh_pci_enable(pe, EEH_OPT_THAW_DMA); in eeh_handle_normal_event()
1034 eeh_pe_state_clear(pe, EEH_PE_ISOLATED, true); in eeh_handle_normal_event()
1042 rc = eeh_reset_device(pe, bus, &rmv_data, true); in eeh_handle_normal_event()
1049 eeh_set_channel_state(pe, pci_channel_io_normal); in eeh_handle_normal_event()
1050 eeh_set_irq_state(pe, true); in eeh_handle_normal_event()
1051 eeh_pe_report("slot_reset", pe, eeh_report_reset, in eeh_handle_normal_event()
1070 eeh_set_channel_state(pe, pci_channel_io_normal); in eeh_handle_normal_event()
1071 eeh_set_irq_state(pe, true); in eeh_handle_normal_event()
1072 eeh_pe_report("resume", pe, eeh_report_resume, NULL); in eeh_handle_normal_event()
1073 eeh_for_each_pe(pe, tmp_pe) { in eeh_handle_normal_event()
1089 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
1091 eeh_slot_error_detail(pe, EEH_LOG_PERM); in eeh_handle_normal_event()
1094 eeh_set_channel_state(pe, pci_channel_io_perm_failure); in eeh_handle_normal_event()
1095 eeh_set_irq_state(pe, false); in eeh_handle_normal_event()
1096 eeh_pe_report("error_detected(permanent failure)", pe, in eeh_handle_normal_event()
1100 eeh_pe_state_mark(pe, EEH_PE_REMOVED); in eeh_handle_normal_event()
1107 if (pe->type & EEH_PE_VF) { in eeh_handle_normal_event()
1108 eeh_pe_dev_traverse(pe, eeh_rmv_device, NULL); in eeh_handle_normal_event()
1109 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
1111 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_handle_normal_event()
1112 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
1127 eeh_pe_cleanup(pe); in eeh_handle_normal_event()
1130 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_normal_event()
1134 eeh_pe_state_clear(pe, EEH_PE_RECOVERING, true); in eeh_handle_normal_event()
1146 struct eeh_pe *pe, *phb_pe, *tmp_pe; in eeh_handle_special_event() local
1155 rc = eeh_ops->next_error(&pe); in eeh_handle_special_event()
1182 eeh_remove_event(pe, true); in eeh_handle_special_event()
1185 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
1186 eeh_pe_mark_isolated(pe); in eeh_handle_special_event()
1206 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
1207 eeh_handle_normal_event(pe); in eeh_handle_special_event()
1217 eeh_for_each_pe(pe, tmp_pe) in eeh_handle_special_event()
1222 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true); in eeh_handle_special_event()
1223 eeh_set_channel_state(pe, pci_channel_io_perm_failure); in eeh_handle_special_event()
1225 "error_detected(permanent failure)", pe, in eeh_handle_special_event()
1232 pe->phb->global_number, in eeh_handle_special_event()
1233 pe->addr); in eeh_handle_special_event()