Lines Matching refs:pe
176 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) in eeh_dev_save_state()
324 if (edev->pe && (edev->pe->state & EEH_PE_CFG_RESTRICTED)) { in eeh_dev_restore_state()
325 if (list_is_last(&edev->list, &edev->pe->edevs)) in eeh_dev_restore_state()
326 eeh_pe_restore_bars(edev->pe); in eeh_dev_restore_state()
462 struct eeh_pe *pe = (struct eeh_pe *)data; in eeh_pe_detach_dev() local
465 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_pe_detach_dev()
485 struct eeh_pe *pe = (struct eeh_pe *)data; in __eeh_clear_pe_frozen_state() local
490 rc = eeh_unfreeze_pe(pe, clear_sw_state); in __eeh_clear_pe_frozen_state()
495 __func__, rc, pe->phb->global_number, pe->addr); in __eeh_clear_pe_frozen_state()
496 return (void *)pe; in __eeh_clear_pe_frozen_state()
502 static int eeh_clear_pe_frozen_state(struct eeh_pe *pe, in eeh_clear_pe_frozen_state() argument
507 rc = eeh_pe_traverse(pe, __eeh_clear_pe_frozen_state, &clear_sw_state); in eeh_clear_pe_frozen_state()
509 eeh_pe_state_clear(pe, EEH_PE_ISOLATED); in eeh_clear_pe_frozen_state()
514 int eeh_pe_reset_and_recover(struct eeh_pe *pe) in eeh_pe_reset_and_recover() argument
519 if (pe->state & EEH_PE_RECOVERING) in eeh_pe_reset_and_recover()
523 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
526 eeh_pe_dev_traverse(pe, eeh_dev_save_state, NULL); in eeh_pe_reset_and_recover()
529 ret = eeh_reset_pe(pe); in eeh_pe_reset_and_recover()
531 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
536 ret = eeh_clear_pe_frozen_state(pe, true); in eeh_pe_reset_and_recover()
538 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
543 eeh_pe_dev_traverse(pe, eeh_report_reset, &result); in eeh_pe_reset_and_recover()
546 eeh_pe_dev_traverse(pe, eeh_dev_restore_state, NULL); in eeh_pe_reset_and_recover()
549 eeh_pe_dev_traverse(pe, eeh_report_resume, NULL); in eeh_pe_reset_and_recover()
552 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
566 static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus) in eeh_reset_device() argument
568 struct pci_bus *frozen_bus = eeh_pe_bus_get(pe); in eeh_reset_device()
573 cnt = pe->freeze_count; in eeh_reset_device()
574 tstamp = pe->tstamp; in eeh_reset_device()
582 eeh_pe_state_mark(pe, EEH_PE_KEEP); in eeh_reset_device()
584 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_reset_device()
589 eeh_pe_dev_traverse(pe, eeh_rmv_device, &removed); in eeh_reset_device()
601 rc = eeh_reset_pe(pe); in eeh_reset_device()
608 eeh_ops->configure_bridge(pe); in eeh_reset_device()
609 eeh_pe_restore_bars(pe); in eeh_reset_device()
612 rc = eeh_clear_pe_frozen_state(pe, false); in eeh_reset_device()
631 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
637 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
640 eeh_pe_state_clear(pe, EEH_PE_KEEP); in eeh_reset_device()
642 pe->tstamp = tstamp; in eeh_reset_device()
643 pe->freeze_count = cnt; in eeh_reset_device()
654 static void eeh_handle_normal_event(struct eeh_pe *pe) in eeh_handle_normal_event() argument
660 frozen_bus = eeh_pe_bus_get(pe); in eeh_handle_normal_event()
663 __func__, pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
667 eeh_pe_update_time_stamp(pe); in eeh_handle_normal_event()
668 pe->freeze_count++; in eeh_handle_normal_event()
669 if (pe->freeze_count > eeh_max_freezes) in eeh_handle_normal_event()
672 pe->freeze_count); in eeh_handle_normal_event()
681 eeh_pe_dev_traverse(pe, eeh_report_error, &result); in eeh_handle_normal_event()
686 rc = eeh_ops->wait_state(pe, MAX_WAIT_FOR_RECOVERY*1000); in eeh_handle_normal_event()
697 eeh_slot_error_detail(pe, EEH_LOG_TEMP); in eeh_handle_normal_event()
705 rc = eeh_reset_device(pe, frozen_bus); in eeh_handle_normal_event()
716 rc = eeh_pci_enable(pe, EEH_OPT_THAW_MMIO); in eeh_handle_normal_event()
724 eeh_pe_dev_traverse(pe, eeh_report_mmio_enabled, &result); in eeh_handle_normal_event()
731 rc = eeh_pci_enable(pe, EEH_OPT_THAW_DMA); in eeh_handle_normal_event()
743 eeh_pe_state_clear(pe, EEH_PE_ISOLATED); in eeh_handle_normal_event()
757 rc = eeh_reset_device(pe, NULL); in eeh_handle_normal_event()
767 eeh_pe_dev_traverse(pe, eeh_report_reset, &result); in eeh_handle_normal_event()
779 eeh_pe_dev_traverse(pe, eeh_report_resume, NULL); in eeh_handle_normal_event()
792 pe->phb->global_number, pe->addr, in eeh_handle_normal_event()
793 pe->freeze_count); in eeh_handle_normal_event()
799 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
802 eeh_slot_error_detail(pe, EEH_LOG_PERM); in eeh_handle_normal_event()
805 eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); in eeh_handle_normal_event()
808 eeh_pe_state_mark(pe, EEH_PE_REMOVED); in eeh_handle_normal_event()
816 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_handle_normal_event()
817 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
827 struct eeh_pe *pe, *phb_pe; in eeh_handle_special_event() local
835 rc = eeh_ops->next_error(&pe); in eeh_handle_special_event()
862 eeh_remove_event(pe, true); in eeh_handle_special_event()
865 eeh_pe_state_mark(pe, EEH_PE_ISOLATED); in eeh_handle_special_event()
867 eeh_pe_state_mark(pe, in eeh_handle_special_event()
888 eeh_handle_normal_event(pe); in eeh_handle_special_event()
889 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
900 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_handle_special_event()
902 eeh_pe_dev_traverse(pe, in eeh_handle_special_event()
935 void eeh_handle_event(struct eeh_pe *pe) in eeh_handle_event() argument
937 if (pe) in eeh_handle_event()
938 eeh_handle_normal_event(pe); in eeh_handle_event()