diff options
author | Keith Busch <keith.busch@intel.com> | 2018-09-20 12:27:12 -0400 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2018-09-26 15:23:14 -0400 |
commit | bdb5ac85777de67c909c9ad4327f03f7648b543f (patch) | |
tree | 06ffd1c0d73efa4807579a2a5b9bc04da8fcca1b /drivers/pci/pcie/aer.c | |
parent | c4eed62a214330908eec11b0dc170d34fa50b412 (diff) |
PCI/ERR: Handle fatal error recovery
We don't need to be paranoid about the topology changing while handling an
error. If the device has changed in a hotplug capable slot, we can rely on
the presence detection handling to react to a changing topology.
Restore the fatal error handling behavior that existed before merging DPC
with AER with 7e9084b36740 ("PCI/AER: Handle ERR_FATAL with removal and
re-enumeration of devices").
Signed-off-by: Keith Busch <keith.busch@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Sinan Kaya <okaya@kernel.org>
Diffstat (limited to 'drivers/pci/pcie/aer.c')
-rw-r--r-- | drivers/pci/pcie/aer.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/pci/pcie/aer.c b/drivers/pci/pcie/aer.c index 1563e22600ec..0619ec5d7bb5 100644 --- a/drivers/pci/pcie/aer.c +++ b/drivers/pci/pcie/aer.c | |||
@@ -1010,9 +1010,11 @@ static void handle_error_source(struct pci_dev *dev, struct aer_err_info *info) | |||
1010 | info->status); | 1010 | info->status); |
1011 | pci_aer_clear_device_status(dev); | 1011 | pci_aer_clear_device_status(dev); |
1012 | } else if (info->severity == AER_NONFATAL) | 1012 | } else if (info->severity == AER_NONFATAL) |
1013 | pcie_do_nonfatal_recovery(dev); | 1013 | pcie_do_recovery(dev, pci_channel_io_normal, |
1014 | PCIE_PORT_SERVICE_AER); | ||
1014 | else if (info->severity == AER_FATAL) | 1015 | else if (info->severity == AER_FATAL) |
1015 | pcie_do_fatal_recovery(dev, PCIE_PORT_SERVICE_AER); | 1016 | pcie_do_recovery(dev, pci_channel_io_frozen, |
1017 | PCIE_PORT_SERVICE_AER); | ||
1016 | pci_dev_put(dev); | 1018 | pci_dev_put(dev); |
1017 | } | 1019 | } |
1018 | 1020 | ||
@@ -1048,9 +1050,11 @@ static void aer_recover_work_func(struct work_struct *work) | |||
1048 | } | 1050 | } |
1049 | cper_print_aer(pdev, entry.severity, entry.regs); | 1051 | cper_print_aer(pdev, entry.severity, entry.regs); |
1050 | if (entry.severity == AER_NONFATAL) | 1052 | if (entry.severity == AER_NONFATAL) |
1051 | pcie_do_nonfatal_recovery(pdev); | 1053 | pcie_do_recovery(pdev, pci_channel_io_normal, |
1054 | PCIE_PORT_SERVICE_AER); | ||
1052 | else if (entry.severity == AER_FATAL) | 1055 | else if (entry.severity == AER_FATAL) |
1053 | pcie_do_fatal_recovery(pdev, PCIE_PORT_SERVICE_AER); | 1056 | pcie_do_recovery(pdev, pci_channel_io_frozen, |
1057 | PCIE_PORT_SERVICE_AER); | ||
1054 | pci_dev_put(pdev); | 1058 | pci_dev_put(pdev); |
1055 | } | 1059 | } |
1056 | } | 1060 | } |