mirror of https://gitee.com/openkylin/linux.git
PCI: Enable upstream bridges even for VFs on virtual buses
Previously we enabled the upstream PCI-to-PCI bridge only when "dev->bus->self != NULL". In the case of a VF on a virtual bus, where "bus->self == NULL", we didn't enable the upstream bridge. This fixes that by enabling the upstream bridge of the PF corresponding to the VF. Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Yinghai Lu <yinghai@kernel.org>
This commit is contained in:
parent
c6bde215ac
commit
79272138bd
|
@ -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++)
|
||||
|
|
Loading…
Reference in New Issue