aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBetty Dall <betty.dall@hp.com>2013-06-06 14:10:51 -0400
committerBjorn Helgaas <bhelgaas@google.com>2013-06-06 17:00:04 -0400
commit081d0fe0ef60c258b67428a8fdf2d14f8ce392ef (patch)
treed5a9566d1ae7cedcef0c8599edac890076aaa409
parent0ba98ec9196746dd6abfa7bb9856ef4f29ffb9be (diff)
PCI/AER: Reset link for devices below Root Port or Downstream Port
When a PCIe device reports a fatal error, we reset the link leading to it. Previously we only did this for devices below Downstream Ports, not for devices directly below Root Ports. This patch changes that so we reset the link leading to devices below Root Ports just like we do for those below Downstream Ports. [bhelgaas: changelog, keep dev_printk(KERN_DEBUG)] Signed-off-by: Betty Dall <betty.dall@hp.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
-rw-r--r--drivers/pci/pcie/aer/aerdrv_core.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/pci/pcie/aer/aerdrv_core.c b/drivers/pci/pcie/aer/aerdrv_core.c
index 8ec8b4f48560..d9e776e69fe8 100644
--- a/drivers/pci/pcie/aer/aerdrv_core.c
+++ b/drivers/pci/pcie/aer/aerdrv_core.c
@@ -400,16 +400,16 @@ void aer_do_secondary_bus_reset(struct pci_dev *dev)
400} 400}
401 401
402/** 402/**
403 * default_downstream_reset_link - default reset function for Downstream Port 403 * default_reset_link - default reset function
404 * @dev: pointer to downstream port's pci_dev data structure 404 * @dev: pointer to pci_dev data structure
405 * 405 *
406 * Invoked when performing link reset at Downstream Port w/ no aer driver. 406 * Invoked when performing link reset on a Downstream Port or a
407 * Root Port with no aer driver.
407 */ 408 */
408static pci_ers_result_t default_downstream_reset_link(struct pci_dev *dev) 409static pci_ers_result_t default_reset_link(struct pci_dev *dev)
409{ 410{
410 aer_do_secondary_bus_reset(dev); 411 aer_do_secondary_bus_reset(dev);
411 dev_printk(KERN_DEBUG, &dev->dev, 412 dev_printk(KERN_DEBUG, &dev->dev, "downstream link has been reset\n");
412 "Downstream Port link has been reset\n");
413 return PCI_ERS_RESULT_RECOVERED; 413 return PCI_ERS_RESULT_RECOVERED;
414} 414}
415 415
@@ -458,8 +458,9 @@ static pci_ers_result_t reset_link(struct pci_dev *dev)
458 458
459 if (driver && driver->reset_link) { 459 if (driver && driver->reset_link) {
460 status = driver->reset_link(udev); 460 status = driver->reset_link(udev);
461 } else if (pci_pcie_type(udev) == PCI_EXP_TYPE_DOWNSTREAM) { 461 } else if (pci_pcie_type(udev) == PCI_EXP_TYPE_DOWNSTREAM ||
462 status = default_downstream_reset_link(udev); 462 pci_pcie_type(udev) == PCI_EXP_TYPE_ROOT_PORT) {
463 status = default_reset_link(udev);
463 } else { 464 } else {
464 dev_printk(KERN_DEBUG, &dev->dev, 465 dev_printk(KERN_DEBUG, &dev->dev,
465 "no link-reset support at upstream device %s\n", 466 "no link-reset support at upstream device %s\n",