]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
PCI: Create SR-IOV virtfn/physfn links before attaching driver
authorStuart Hayes <stuart.w.hayes@gmail.com>
Wed, 4 Oct 2017 15:57:52 +0000 (10:57 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 11 Oct 2017 00:13:38 +0000 (19:13 -0500)
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>
drivers/pci/iov.c

index 7492a65baba9b4eccc8c04702245b4bf74cfc288..ce24cf235f010a132915214e4e98f5374fe55a45 100644 (file)
@@ -159,7 +159,6 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 
        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)
@@ -170,6 +169,8 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id)
 
        kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE);
 
+       pci_bus_add_device(virtfn);
+
        return 0;
 
 failed2: