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()
464 struct eeh_pe *pe = (struct eeh_pe *)data; in eeh_pe_detach_dev() local
467 eeh_pe_for_each_dev(pe, edev, tmp) { in eeh_pe_detach_dev()
487 struct eeh_pe *pe = (struct eeh_pe *)data; in __eeh_clear_pe_frozen_state() local
492 rc = eeh_unfreeze_pe(pe, clear_sw_state); in __eeh_clear_pe_frozen_state()
497 __func__, rc, pe->phb->global_number, pe->addr); in __eeh_clear_pe_frozen_state()
498 return (void *)pe; in __eeh_clear_pe_frozen_state()
504 static int eeh_clear_pe_frozen_state(struct eeh_pe *pe, in eeh_clear_pe_frozen_state() argument
509 rc = eeh_pe_traverse(pe, __eeh_clear_pe_frozen_state, &clear_sw_state); in eeh_clear_pe_frozen_state()
511 eeh_pe_state_clear(pe, EEH_PE_ISOLATED); in eeh_clear_pe_frozen_state()
516 int eeh_pe_reset_and_recover(struct eeh_pe *pe) in eeh_pe_reset_and_recover() argument
521 if (pe->state & EEH_PE_RECOVERING) in eeh_pe_reset_and_recover()
525 eeh_pe_state_mark(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
528 eeh_pe_dev_traverse(pe, eeh_dev_save_state, NULL); in eeh_pe_reset_and_recover()
531 ret = eeh_reset_pe(pe); in eeh_pe_reset_and_recover()
533 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
538 ret = eeh_clear_pe_frozen_state(pe, true); in eeh_pe_reset_and_recover()
540 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
545 eeh_pe_dev_traverse(pe, eeh_report_reset, &result); in eeh_pe_reset_and_recover()
548 eeh_pe_dev_traverse(pe, eeh_dev_restore_state, NULL); in eeh_pe_reset_and_recover()
551 eeh_pe_dev_traverse(pe, eeh_report_resume, NULL); in eeh_pe_reset_and_recover()
554 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_pe_reset_and_recover()
568 static int eeh_reset_device(struct eeh_pe *pe, struct pci_bus *bus) in eeh_reset_device() argument
570 struct pci_bus *frozen_bus = eeh_pe_bus_get(pe); in eeh_reset_device()
575 cnt = pe->freeze_count; in eeh_reset_device()
576 tstamp = pe->tstamp; in eeh_reset_device()
584 eeh_pe_state_mark(pe, EEH_PE_KEEP); in eeh_reset_device()
586 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_reset_device()
591 eeh_pe_dev_traverse(pe, eeh_rmv_device, &removed); in eeh_reset_device()
603 rc = eeh_reset_pe(pe); in eeh_reset_device()
610 eeh_ops->configure_bridge(pe); in eeh_reset_device()
611 eeh_pe_restore_bars(pe); in eeh_reset_device()
614 rc = eeh_clear_pe_frozen_state(pe, false); in eeh_reset_device()
633 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
639 eeh_pe_traverse(pe, eeh_pe_detach_dev, NULL); in eeh_reset_device()
642 eeh_pe_state_clear(pe, EEH_PE_KEEP); in eeh_reset_device()
644 pe->tstamp = tstamp; in eeh_reset_device()
645 pe->freeze_count = cnt; in eeh_reset_device()
656 static void eeh_handle_normal_event(struct eeh_pe *pe) in eeh_handle_normal_event() argument
662 frozen_bus = eeh_pe_bus_get(pe); in eeh_handle_normal_event()
665 __func__, pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
669 eeh_pe_update_time_stamp(pe); in eeh_handle_normal_event()
670 pe->freeze_count++; in eeh_handle_normal_event()
671 if (pe->freeze_count > eeh_max_freezes) in eeh_handle_normal_event()
674 pe->freeze_count); in eeh_handle_normal_event()
687 eeh_pe_dev_traverse(pe, eeh_report_error, &result); in eeh_handle_normal_event()
688 if ((pe->type & EEH_PE_PHB) && in eeh_handle_normal_event()
696 rc = eeh_ops->wait_state(pe, MAX_WAIT_FOR_RECOVERY*1000); in eeh_handle_normal_event()
707 eeh_slot_error_detail(pe, EEH_LOG_TEMP); in eeh_handle_normal_event()
715 rc = eeh_reset_device(pe, frozen_bus); in eeh_handle_normal_event()
726 rc = eeh_pci_enable(pe, EEH_OPT_THAW_MMIO); in eeh_handle_normal_event()
734 eeh_pe_dev_traverse(pe, eeh_report_mmio_enabled, &result); in eeh_handle_normal_event()
741 rc = eeh_pci_enable(pe, EEH_OPT_THAW_DMA); in eeh_handle_normal_event()
753 eeh_pe_state_clear(pe, EEH_PE_ISOLATED); in eeh_handle_normal_event()
767 rc = eeh_reset_device(pe, NULL); in eeh_handle_normal_event()
777 eeh_pe_dev_traverse(pe, eeh_report_reset, &result); in eeh_handle_normal_event()
789 eeh_pe_dev_traverse(pe, eeh_report_resume, NULL); in eeh_handle_normal_event()
802 pe->phb->global_number, pe->addr, in eeh_handle_normal_event()
803 pe->freeze_count); in eeh_handle_normal_event()
809 pe->phb->global_number, pe->addr); in eeh_handle_normal_event()
812 eeh_slot_error_detail(pe, EEH_LOG_PERM); in eeh_handle_normal_event()
815 eeh_pe_dev_traverse(pe, eeh_report_failure, NULL); in eeh_handle_normal_event()
818 eeh_pe_state_mark(pe, EEH_PE_REMOVED); in eeh_handle_normal_event()
826 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_handle_normal_event()
827 eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED); in eeh_handle_normal_event()
837 struct eeh_pe *pe, *phb_pe; in eeh_handle_special_event() local
845 rc = eeh_ops->next_error(&pe); in eeh_handle_special_event()
872 eeh_remove_event(pe, true); in eeh_handle_special_event()
875 eeh_pe_state_mark(pe, EEH_PE_ISOLATED); in eeh_handle_special_event()
877 eeh_pe_state_mark(pe, in eeh_handle_special_event()
898 eeh_handle_normal_event(pe); in eeh_handle_special_event()
899 eeh_pe_state_clear(pe, EEH_PE_RECOVERING); in eeh_handle_special_event()
910 eeh_pe_state_clear(pe, EEH_PE_PRI_BUS); in eeh_handle_special_event()
912 eeh_pe_dev_traverse(pe, in eeh_handle_special_event()
945 void eeh_handle_event(struct eeh_pe *pe) in eeh_handle_event() argument
947 if (pe) in eeh_handle_event()
948 eeh_handle_normal_event(pe); in eeh_handle_event()