|
@@ -1148,12 +1148,12 @@ int pci_reenable_device(struct pci_dev *dev)
|
|
|
|
|
|
static void pci_enable_bridge(struct pci_dev *dev)
|
|
|
{
|
|
|
+ struct pci_dev *bridge;
|
|
|
int retval;
|
|
|
|
|
|
- if (!dev)
|
|
|
- return;
|
|
|
-
|
|
|
- pci_enable_bridge(dev->bus->self);
|
|
|
+ bridge = pci_upstream_bridge(dev);
|
|
|
+ if (bridge)
|
|
|
+ pci_enable_bridge(bridge);
|
|
|
|
|
|
if (pci_is_enabled(dev)) {
|
|
|
if (!dev->is_busmaster)
|
|
@@ -1170,6 +1170,7 @@ static void pci_enable_bridge(struct pci_dev *dev)
|
|
|
|
|
|
static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
|
|
|
{
|
|
|
+ struct pci_dev *bridge;
|
|
|
int err;
|
|
|
int i, bars = 0;
|
|
|
|
|
@@ -1188,7 +1189,9 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
|
|
|
if (atomic_inc_return(&dev->enable_cnt) > 1)
|
|
|
return 0; /* already enabled */
|
|
|
|
|
|
- pci_enable_bridge(dev->bus->self);
|
|
|
+ bridge = pci_upstream_bridge(dev);
|
|
|
+ if (bridge)
|
|
|
+ pci_enable_bridge(bridge);
|
|
|
|
|
|
/* only skip sriov related */
|
|
|
for (i = 0; i <= PCI_ROM_RESOURCE; i++)
|