summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStuart Hayes <stuart.w.hayes@gmail.com>2017-10-04 10:57:52 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-12-25 14:26:26 +0100
commit7af9f9cd68c7b6f009c4a0c0d8ea7703aa46a26b (patch)
treed6e6943c6cf9825da8eb1aaf29103a34faafa1b7
parent6d95d05bafbafc88a13d81e7ad63fcb899de499d (diff)
downloadlinux-stable-7af9f9cd68c7b6f009c4a0c0d8ea7703aa46a26b.tar.gz
linux-stable-7af9f9cd68c7b6f009c4a0c0d8ea7703aa46a26b.tar.bz2
linux-stable-7af9f9cd68c7b6f009c4a0c0d8ea7703aa46a26b.zip
PCI: Create SR-IOV virtfn/physfn links before attaching driver
[ Upstream commit 27d6162944b9b34c32cd5841acd21786637ee743 ] When creating virtual functions, create the "virtfn%u" and "physfn" links in sysfs *before* attaching the driver instead of after. When we attach the driver to the new virtual network interface first, there is a race when the driver attaches to the new sends out an "add" udev event, and the network interface naming software (biosdevname or systemd, for example) tries to look at these links. Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Sasha Levin <alexander.levin@verizon.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/pci/iov.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index ac41c8be9200..0fd8e164339c 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -162,7 +162,6 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
pci_device_add(virtfn, virtfn->bus);
- pci_bus_add_device(virtfn);
sprintf(buf, "virtfn%u", id);
rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
if (rc)
@@ -173,6 +172,8 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)
kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
+ pci_bus_add_device(virtfn);
+
return 0;
failed2: