Message ID | 20200930215820.1113353-7-seanvk.dev@oregontracks.org |
---|---|
State | New |
Headers | show |
Series | Add RCEC handling to PCI/AER | expand |
On Wed, 30 Sep 2020 14:58:13 -0700 Sean V Kelley <seanvk.dev@oregontracks.org> wrote: > From: Sean V Kelley <sean.v.kelley@intel.com> > > In some cases a bridge may not exist as the hardware > controlling may be handled only by firmware and so is > not visible to the OS. This scenario is also possible > in future use cases involving non-native use of RCECs > by firmware. So explicitly apply conditional logic > around these resets by limiting them to root ports and > downstream ports. > > Signed-off-by: Sean V Kelley <sean.v.kelley@intel.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > drivers/pci/pcie/err.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c > index c6922c099c76..9e552330155b 100644 > --- a/drivers/pci/pcie/err.c > +++ b/drivers/pci/pcie/err.c > @@ -203,9 +203,12 @@ pci_ers_result_t pcie_do_recovery(struct pci_dev *dev, > pci_dbg(dev, "broadcast resume message\n"); > pci_walk_bus(bus, report_resume, &status); > > - if (pcie_aer_is_native(dev)) > - pcie_clear_device_status(dev); > - pci_aer_clear_nonfatal_status(dev); > + if (type == PCI_EXP_TYPE_ROOT_PORT || > + type == PCI_EXP_TYPE_DOWNSTREAM) { > + if (pcie_aer_is_native(bridge)) > + pcie_clear_device_status(bridge); > + pci_aer_clear_nonfatal_status(bridge); > + } > pci_info(dev, "device recovery successful\n"); > return status; >
diff --git a/drivers/pci/pcie/err.c b/drivers/pci/pcie/err.c index c6922c099c76..9e552330155b 100644 --- a/drivers/pci/pcie/err.c +++ b/drivers/pci/pcie/err.c @@ -203,9 +203,12 @@ pci_ers_result_t pcie_do_recovery(struct pci_dev *dev, pci_dbg(dev, "broadcast resume message\n"); pci_walk_bus(bus, report_resume, &status); - if (pcie_aer_is_native(dev)) - pcie_clear_device_status(dev); - pci_aer_clear_nonfatal_status(dev); + if (type == PCI_EXP_TYPE_ROOT_PORT || + type == PCI_EXP_TYPE_DOWNSTREAM) { + if (pcie_aer_is_native(bridge)) + pcie_clear_device_status(bridge); + pci_aer_clear_nonfatal_status(bridge); + } pci_info(dev, "device recovery successful\n"); return status;