| From foo@baz Thu Dec 21 09:02:40 CET 2017 |
| From: Stuart Hayes <stuart.w.hayes@gmail.com> |
| Date: Wed, 4 Oct 2017 10:57:52 -0500 |
| Subject: PCI: Create SR-IOV virtfn/physfn links before attaching driver |
| |
| From: Stuart Hayes <stuart.w.hayes@gmail.com> |
| |
| |
| [ 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> |
| --- |
| drivers/pci/iov.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/pci/iov.c |
| +++ b/drivers/pci/iov.c |
| @@ -164,7 +164,6 @@ int pci_iov_add_virtfn(struct pci_dev *d |
| pci_device_add(virtfn, virtfn->bus); |
| mutex_unlock(&iov->dev->sriov->lock); |
| |
| - pci_bus_add_device(virtfn); |
| sprintf(buf, "virtfn%u", id); |
| rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf); |
| if (rc) |
| @@ -175,6 +174,8 @@ int pci_iov_add_virtfn(struct pci_dev *d |
| |
| kobject_uevent(&virtfn->dev.kobj, KOBJ_CHANGE); |
| |
| + pci_bus_add_device(virtfn); |
| + |
| return 0; |
| |
| failed2: |