summaryrefslogtreecommitdiff
path: root/drivers/pci/pci.c
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2017-11-14 12:11:36 -0600
committerBjorn Helgaas <bhelgaas@google.com>2017-11-14 12:11:36 -0600
commit29d0d4411fafa1a934ff6ff00840df4f880add41 (patch)
tree749277ae8b4a8a90fdd978cf37986e5072a30ca2 /drivers/pci/pci.c
parentd238be6957b2e57913f602fc4429813ca6027e93 (diff)
parent33ba90aa4d4432b884fc0ed57ba9dc12eb8fa288 (diff)
Merge branch 'pci/host-thunder' into next
* pci/host-thunder: PCI: Avoid slot reset if bridge itself is broken PCI: Avoid bus reset if bridge itself is broken PCI: Mark Cavium CN8xxx to avoid bus reset
Diffstat (limited to 'drivers/pci/pci.c')
-rw-r--r--drivers/pci/pci.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index 50f148f154ab..b03e91aa8fec 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -4436,6 +4436,10 @@ static bool pci_bus_resetable(struct pci_bus *bus)
{
struct pci_dev *dev;
+
+ if (bus->self && (bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
+ return false;
+
list_for_each_entry(dev, &bus->devices, bus_list) {
if (dev->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET ||
(dev->subordinate && !pci_bus_resetable(dev->subordinate)))
@@ -4500,6 +4504,10 @@ static bool pci_slot_resetable(struct pci_slot *slot)
{
struct pci_dev *dev;
+ if (slot->bus->self &&
+ (slot->bus->self->dev_flags & PCI_DEV_FLAGS_NO_BUS_RESET))
+ return false;
+
list_for_each_entry(dev, &slot->bus->devices, bus_list) {
if (!dev->slot || dev->slot != slot)
continue;