summaryrefslogtreecommitdiffstats
path: root/drivers/pci/iov.c
diff options
context:
space:
mode:
authorYinghai Lu <yinghai@kernel.org>2013-01-21 22:20:52 +0100
committerBjorn Helgaas <bhelgaas@google.com>2013-01-26 00:22:37 +0100
commit4f535093cf8f6da8cfda7c36c2c1ecd2e9586ee4 (patch)
tree62bf63646dc1c6870c5520b15d0f17aa09e05db5 /drivers/pci/iov.c
parentPCI: Skip attaching driver in device_add() (diff)
downloadlinux-4f535093cf8f6da8cfda7c36c2c1ecd2e9586ee4.tar.xz
linux-4f535093cf8f6da8cfda7c36c2c1ecd2e9586ee4.zip
PCI: Put pci_dev in device tree as early as possible
We want to put pci_dev structs in the device tree as soon as possible so for_each_pci_dev() iteration will not miss them, but driver attachment needs to be delayed until after pci_assign_unassigned_resources() to make sure all devices have resources assigned first. This patch moves device registering from pci_bus_add_devices() to pci_device_add(), which happens earlier, leaving driver attachment in pci_bus_add_devices(). It also removes unattached child bus handling in pci_bus_add_devices(). That's not needed because child bus via pci_add_new_bus() is already in parent bus children list. [bhelgaas: changelog] Signed-off-by: Yinghai Lu <yinghai@kernel.org> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/pci/iov.c')
-rw-r--r--drivers/pci/iov.c9
1 files changed, 1 insertions, 8 deletions
diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c
index bafd2bbcaf65..f8720afe0537 100644
--- a/drivers/pci/iov.c
+++ b/drivers/pci/iov.c
@@ -48,12 +48,7 @@ static struct pci_bus *virtfn_add_bus(struct pci_bus *bus, int busnr)
return NULL;
pci_bus_insert_busn_res(child, busnr, busnr);
- child->dev.parent = bus->bridge;
- rc = pci_bus_add_child(child);
- if (rc) {
- pci_remove_bus(child);
- return NULL;
- }
+ bus->is_added = 1;
return child;
}
@@ -123,8 +118,6 @@ static int virtfn_add(struct pci_dev *dev, int id, int reset)
virtfn->is_virtfn = 1;
rc = pci_bus_add_device(virtfn);
- if (rc)
- goto failed1;
sprintf(buf, "virtfn%u", id);
rc = sysfs_create_link(&dev->dev.kobj, &virtfn->dev.kobj, buf);
if (rc)