linux/drivers/pci/pcie
Keith Busch bfcb79fca1 PCI/ERR: Run error recovery callbacks for all affected devices
If an Endpoint reported an error with ERR_FATAL, we previously ran driver
error recovery callbacks only for the Endpoint's driver.  But if we reset a
Link to recover from the error, all downstream components are affected,
including the Endpoint, any multi-function peers, and children of those
peers.

Initiate the Link reset from the deepest Downstream Port that is
reliable, and call the error recovery callbacks for all its children.

If a Downstream Port (including a Root Port) reports an error, we assume
the Port itself is reliable and we need to reset its downstream Link.  In
all other cases (Switch Upstream Ports, Endpoints, Bridges, etc), we assume
the Link leading to the component needs to be reset, so we initiate the
reset at the parent Downstream Port.

This allows two other clean-ups.  First, we currently only use a Link
reset, which can only be initiated using a Downstream Port, so we can
remove checks for Endpoints.  Second, the Downstream Port where we initiate
the Link reset is reliable (unlike components downstream from it), so the
special cases for error detect and resume are no longer necessary.

Signed-off-by: Keith Busch <keith.busch@intel.com>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Sinan Kaya <okaya@kernel.org>
2018-09-26 14:23:15 -05:00
..
aer.c PCI/ERR: Handle fatal error recovery 2018-09-26 14:23:14 -05:00
aer_inject.c PCI/AER: Hoist aerdrv.c, aer_inject.c up to drivers/pci/pcie/ 2018-06-11 08:11:39 -05:00
aspm.c PCI/ASPM: Convert to use sysfs_match_string() helper 2018-08-06 14:30:34 -05:00
dpc.c PCI/ERR: Handle fatal error recovery 2018-09-26 14:23:14 -05:00
err.c PCI/ERR: Run error recovery callbacks for all affected devices 2018-09-26 14:23:15 -05:00
Kconfig PCI/AER: Use "PCI Express" consistently in Kconfig text 2018-06-11 08:11:47 -05:00
Makefile PCI/AER: Hoist aerdrv.c, aer_inject.c up to drivers/pci/pcie/ 2018-06-11 08:11:39 -05:00
pme.c PCI: portdrv: Initialize service drivers directly 2018-09-20 12:05:54 -05:00
portdrv.h PCI: portdrv: Initialize service drivers directly 2018-09-20 12:05:54 -05:00
portdrv_core.c PCI: pciehp: Clear spurious events earlier on resume 2018-07-31 11:07:59 -05:00
portdrv_pci.c PCI: portdrv: Restore PCI config state on slot reset 2018-09-20 16:06:18 -05:00
ptm.c Merge branch 'pci/spdx' into next 2018-02-01 11:40:07 -06:00