PCI: Check for pci_setup_device() failure in pci_iov_add_virtfn()

If pci_setup_device() returns failure, we must return failure from
pci_iov_add_virtfn().  If we ignore the failure and continue with an
uninitialized pci_dev for virtfn, we crash later when we try to use those
uninitialized parts.

Signed-off-by: Po Liu <po.liu@nxp.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
This commit is contained in:
Po Liu 2016-08-29 15:28:01 +08:00 committed by Bjorn Helgaas
parent 8e2e031799
commit 156c55325d

View File

@ -136,7 +136,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
virtfn->devfn = pci_iov_virtfn_devfn(dev, id); virtfn->devfn = pci_iov_virtfn_devfn(dev, id);
virtfn->vendor = dev->vendor; virtfn->vendor = dev->vendor;
pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device); pci_read_config_word(dev, iov->pos + PCI_SRIOV_VF_DID, &virtfn->device);
pci_setup_device(virtfn); rc = pci_setup_device(virtfn);
if (rc)
goto failed0;
virtfn->dev.parent = dev->dev.parent; virtfn->dev.parent = dev->dev.parent;
virtfn->physfn = pci_dev_get(dev); virtfn->physfn = pci_dev_get(dev);
virtfn->is_virtfn = 1; virtfn->is_virtfn = 1;