diff options
author | Yinghai Lu <yinghai@kernel.org> | 2013-01-21 13:20:52 -0800 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2013-01-25 16:22:37 -0700 |
commit | 4f535093cf8f6da8cfda7c36c2c1ecd2e9586ee4 (patch) | |
tree | 62bf63646dc1c6870c5520b15d0f17aa09e05db5 /drivers/pci/iov.c | |
parent | 58d9a38f6facb28e935ec2747f6d9e9bf4684118 (diff) | |
download | lwn-4f535093cf8f6da8cfda7c36c2c1ecd2e9586ee4.tar.gz lwn-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.c | 9 |
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) |