Loading Documentation/PCI/pci-error-recovery.txt +3 −21 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ struct pci_error_handlers { int (*error_detected)(struct pci_dev *dev, enum pci_channel_state); int (*mmio_enabled)(struct pci_dev *dev); int (*link_reset)(struct pci_dev *dev); int (*slot_reset)(struct pci_dev *dev); void (*resume)(struct pci_dev *dev); }; Loading @@ -104,8 +103,7 @@ if it implements any, it must implement error_detected(). If a callback is not implemented, the corresponding feature is considered unsupported. For example, if mmio_enabled() and resume() aren't there, then it is assumed that the driver is not doing any direct recovery and requires a slot reset. If link_reset() is not implemented, the card is assumed to not care about link resets. Typically a driver will want to know about a slot reset. Typically a driver will want to know about a slot_reset(). The actual steps taken by a platform to recover from a PCI error Loading Loading @@ -232,25 +230,9 @@ proceeds to STEP 4 (Slot Reset) STEP 3: Link Reset ------------------ The platform resets the link, and then calls the link_reset() callback on all affected device drivers. This is a PCI-Express specific state The platform resets the link. This is a PCI-Express specific step and is done whenever a non-fatal error has been detected that can be "solved" by resetting the link. This call informs the driver of the reset and the driver should check to see if the device appears to be in working condition. The driver is not supposed to restart normal driver I/O operations at this point. It should limit itself to "probing" the device to check its recoverability status. If all is right, then the platform will call resume() once all drivers have ack'd link_reset(). Result codes: (identical to STEP 3 (MMIO Enabled) The platform then proceeds to either STEP 4 (Slot Reset) or STEP 5 (Resume Operations). >>> The current powerpc implementation does not implement this callback. "solved" by resetting the link. STEP 4: Slot Reset ------------------ Loading drivers/infiniband/hw/hfi1/pcie.c +0 −10 Original line number Diff line number Diff line Loading @@ -598,15 +598,6 @@ pci_slot_reset(struct pci_dev *pdev) return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t pci_link_reset(struct pci_dev *pdev) { struct hfi1_devdata *dd = pci_get_drvdata(pdev); dd_dev_info(dd, "HFI1 link_reset function called, ignored\n"); return PCI_ERS_RESULT_CAN_RECOVER; } static void pci_resume(struct pci_dev *pdev) { Loading @@ -625,7 +616,6 @@ pci_resume(struct pci_dev *pdev) const struct pci_error_handlers hfi1_pci_err_handler = { .error_detected = pci_error_detected, .mmio_enabled = pci_mmio_enabled, .link_reset = pci_link_reset, .slot_reset = pci_slot_reset, .resume = pci_resume, }; Loading drivers/infiniband/hw/qib/qib_pcie.c +0 −8 Original line number Diff line number Diff line Loading @@ -682,13 +682,6 @@ qib_pci_slot_reset(struct pci_dev *pdev) return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t qib_pci_link_reset(struct pci_dev *pdev) { qib_devinfo(pdev, "QIB link_reset function called, ignored\n"); return PCI_ERS_RESULT_CAN_RECOVER; } static void qib_pci_resume(struct pci_dev *pdev) { Loading @@ -707,7 +700,6 @@ qib_pci_resume(struct pci_dev *pdev) const struct pci_error_handlers qib_pci_err_handler = { .error_detected = qib_pci_error_detected, .mmio_enabled = qib_pci_mmio_enabled, .link_reset = qib_pci_link_reset, .slot_reset = qib_pci_slot_reset, .resume = qib_pci_resume, }; drivers/media/pci/ngene/ngene-cards.c +0 −7 Original line number Diff line number Diff line Loading @@ -781,12 +781,6 @@ static pci_ers_result_t ngene_error_detected(struct pci_dev *dev, return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t ngene_link_reset(struct pci_dev *dev) { printk(KERN_INFO DEVICE_NAME ": link reset\n"); return 0; } static pci_ers_result_t ngene_slot_reset(struct pci_dev *dev) { printk(KERN_INFO DEVICE_NAME ": slot reset\n"); Loading @@ -800,7 +794,6 @@ static void ngene_resume(struct pci_dev *dev) static const struct pci_error_handlers ngene_errors = { .error_detected = ngene_error_detected, .link_reset = ngene_link_reset, .slot_reset = ngene_slot_reset, .resume = ngene_resume, }; Loading drivers/misc/genwqe/card_base.c +0 −1 Original line number Diff line number Diff line Loading @@ -1336,7 +1336,6 @@ static int genwqe_sriov_configure(struct pci_dev *dev, int numvfs) static struct pci_error_handlers genwqe_err_handler = { .error_detected = genwqe_err_error_detected, .mmio_enabled = genwqe_err_result_none, .link_reset = genwqe_err_result_none, .slot_reset = genwqe_err_slot_reset, .resume = genwqe_err_resume, }; Loading Loading
Documentation/PCI/pci-error-recovery.txt +3 −21 Original line number Diff line number Diff line Loading @@ -78,7 +78,6 @@ struct pci_error_handlers { int (*error_detected)(struct pci_dev *dev, enum pci_channel_state); int (*mmio_enabled)(struct pci_dev *dev); int (*link_reset)(struct pci_dev *dev); int (*slot_reset)(struct pci_dev *dev); void (*resume)(struct pci_dev *dev); }; Loading @@ -104,8 +103,7 @@ if it implements any, it must implement error_detected(). If a callback is not implemented, the corresponding feature is considered unsupported. For example, if mmio_enabled() and resume() aren't there, then it is assumed that the driver is not doing any direct recovery and requires a slot reset. If link_reset() is not implemented, the card is assumed to not care about link resets. Typically a driver will want to know about a slot reset. Typically a driver will want to know about a slot_reset(). The actual steps taken by a platform to recover from a PCI error Loading Loading @@ -232,25 +230,9 @@ proceeds to STEP 4 (Slot Reset) STEP 3: Link Reset ------------------ The platform resets the link, and then calls the link_reset() callback on all affected device drivers. This is a PCI-Express specific state The platform resets the link. This is a PCI-Express specific step and is done whenever a non-fatal error has been detected that can be "solved" by resetting the link. This call informs the driver of the reset and the driver should check to see if the device appears to be in working condition. The driver is not supposed to restart normal driver I/O operations at this point. It should limit itself to "probing" the device to check its recoverability status. If all is right, then the platform will call resume() once all drivers have ack'd link_reset(). Result codes: (identical to STEP 3 (MMIO Enabled) The platform then proceeds to either STEP 4 (Slot Reset) or STEP 5 (Resume Operations). >>> The current powerpc implementation does not implement this callback. "solved" by resetting the link. STEP 4: Slot Reset ------------------ Loading
drivers/infiniband/hw/hfi1/pcie.c +0 −10 Original line number Diff line number Diff line Loading @@ -598,15 +598,6 @@ pci_slot_reset(struct pci_dev *pdev) return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t pci_link_reset(struct pci_dev *pdev) { struct hfi1_devdata *dd = pci_get_drvdata(pdev); dd_dev_info(dd, "HFI1 link_reset function called, ignored\n"); return PCI_ERS_RESULT_CAN_RECOVER; } static void pci_resume(struct pci_dev *pdev) { Loading @@ -625,7 +616,6 @@ pci_resume(struct pci_dev *pdev) const struct pci_error_handlers hfi1_pci_err_handler = { .error_detected = pci_error_detected, .mmio_enabled = pci_mmio_enabled, .link_reset = pci_link_reset, .slot_reset = pci_slot_reset, .resume = pci_resume, }; Loading
drivers/infiniband/hw/qib/qib_pcie.c +0 −8 Original line number Diff line number Diff line Loading @@ -682,13 +682,6 @@ qib_pci_slot_reset(struct pci_dev *pdev) return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t qib_pci_link_reset(struct pci_dev *pdev) { qib_devinfo(pdev, "QIB link_reset function called, ignored\n"); return PCI_ERS_RESULT_CAN_RECOVER; } static void qib_pci_resume(struct pci_dev *pdev) { Loading @@ -707,7 +700,6 @@ qib_pci_resume(struct pci_dev *pdev) const struct pci_error_handlers qib_pci_err_handler = { .error_detected = qib_pci_error_detected, .mmio_enabled = qib_pci_mmio_enabled, .link_reset = qib_pci_link_reset, .slot_reset = qib_pci_slot_reset, .resume = qib_pci_resume, };
drivers/media/pci/ngene/ngene-cards.c +0 −7 Original line number Diff line number Diff line Loading @@ -781,12 +781,6 @@ static pci_ers_result_t ngene_error_detected(struct pci_dev *dev, return PCI_ERS_RESULT_CAN_RECOVER; } static pci_ers_result_t ngene_link_reset(struct pci_dev *dev) { printk(KERN_INFO DEVICE_NAME ": link reset\n"); return 0; } static pci_ers_result_t ngene_slot_reset(struct pci_dev *dev) { printk(KERN_INFO DEVICE_NAME ": slot reset\n"); Loading @@ -800,7 +794,6 @@ static void ngene_resume(struct pci_dev *dev) static const struct pci_error_handlers ngene_errors = { .error_detected = ngene_error_detected, .link_reset = ngene_link_reset, .slot_reset = ngene_slot_reset, .resume = ngene_resume, }; Loading
drivers/misc/genwqe/card_base.c +0 −1 Original line number Diff line number Diff line Loading @@ -1336,7 +1336,6 @@ static int genwqe_sriov_configure(struct pci_dev *dev, int numvfs) static struct pci_error_handlers genwqe_err_handler = { .error_detected = genwqe_err_error_detected, .mmio_enabled = genwqe_err_result_none, .link_reset = genwqe_err_result_none, .slot_reset = genwqe_err_slot_reset, .resume = genwqe_err_resume, }; Loading