OSDN Git Service

Merge branch 'pci/misc' into next
authorBjorn Helgaas <bhelgaas@google.com>
Wed, 28 Nov 2012 18:39:19 +0000 (11:39 -0700)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 28 Nov 2012 18:39:19 +0000 (11:39 -0700)
* pci/misc:
  PCI/AER: Report success only when every device has AER-aware driver

Conflicts:
drivers/pci/pcie/aer/aerdrv_core.c

1  2 
drivers/pci/pcie/aer/aerdrv_core.c
include/linux/pci.h

@@@ -232,14 -231,27 +232,28 @@@ static int report_error_detected(struc
                                   dev->driver ?
                                   "no AER-aware driver" : "no driver");
                }
-               goto out;
+               /*
+                * If there's any device in the subtree that does not
+                * have an error_detected callback, returning
+                * PCI_ERS_RESULT_NO_AER_DRIVER prevents calling of
+                * the subsequent mmio_enabled/slot_reset/resume
+                * callbacks of "any" device in the subtree. All the
+                * devices in the subtree are left in the error state
+                * without recovery.
+                */
+               if (!(dev->hdr_type & PCI_HEADER_TYPE_BRIDGE))
+                       vote = PCI_ERS_RESULT_NO_AER_DRIVER;
+               else
+                       vote = PCI_ERS_RESULT_NONE;
+       } else {
+               err_handler = dev->driver->err_handler;
+               vote = err_handler->error_detected(dev, result_data->state);
        }
  
-       err_handler = dev->driver->err_handler;
-       vote = err_handler->error_detected(dev, result_data->state);
        result_data->result = merge_result(result_data->result, vote);
- out:
 +      device_unlock(&dev->dev);
        return 0;
  }
  
Simple merge