Merge branch 'pci/yinghai-assign-unassigned-v6' into next

* pci/yinghai-assign-unassigned-v6:
  PCI: Assign resources for hot-added host bridge more aggressively
  PCI: Move resource reallocation code to non-__init
  PCI: Delay enabling bridges until they're needed
  PCI: Assign resources on a per-bus basis
  PCI: Enable unassigned resource reallocation on per-bus basis
  PCI: Turn on reallocation for unassigned resources with host bridge offset
  PCI: Look for unassigned resources on per-bus basis
  PCI: Drop temporary variable in pci_assign_unassigned_resources()
This commit is contained in:
Bjorn Helgaas
2013-08-26 15:40:03 -06:00
13 changed files with 99 additions and 110 deletions

View File

@@ -1146,6 +1146,24 @@ int pci_reenable_device(struct pci_dev *dev)
return 0;
}
static void pci_enable_bridge(struct pci_dev *dev)
{
int retval;
if (!dev)
return;
pci_enable_bridge(dev->bus->self);
if (pci_is_enabled(dev))
return;
retval = pci_enable_device(dev);
if (retval)
dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
retval);
pci_set_master(dev);
}
static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
{
int err;
@@ -1166,6 +1184,8 @@ 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);
/* only skip sriov related */
for (i = 0; i <= PCI_ROM_RESOURCE; i++)
if (dev->resource[i].flags & flags)