Move pcibios_root_bridge_prepare() to pci_create_host_bridge().

Signed-off-by: Yijing Wang <wangyij...@huawei.com>
---
 drivers/pci/host-bridge.c |   16 +++++++++++++---
 drivers/pci/probe.c       |    3 ---
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/drivers/pci/host-bridge.c b/drivers/pci/host-bridge.c
index b0ed8da..87c4fc5 100644
--- a/drivers/pci/host-bridge.c
+++ b/drivers/pci/host-bridge.c
@@ -92,9 +92,7 @@ struct pci_host_bridge *pci_create_host_bridge(
                        pr_warn("pci host bridge pci%04x:%02x exist\n",
                                        host->domain, bus);
                        mutex_unlock(&pci_host_mutex);
-                       pci_free_resource_list(&host->windows);
-                       kfree(host);
-                       return NULL;
+                       goto free_res;
                }
        }
        list_add_tail(&host->list, &pci_host_bridge_list);
@@ -105,6 +103,10 @@ struct pci_host_bridge *pci_create_host_bridge(
        dev_set_name(&host->dev, "pci%04x:%02x",
                        host->domain, bus);
 
+       error = pcibios_root_bridge_prepare(host);
+       if (error)
+               goto list_del;
+
        error = device_register(&host->dev);
        if (error) {
                put_device(&host->dev);
@@ -112,6 +114,14 @@ struct pci_host_bridge *pci_create_host_bridge(
        }
 
        return host;
+list_del:
+       mutex_lock(&pci_host_mutex);
+       list_del(&host->list);
+       mutex_unlock(&pci_host_mutex);
+free_res:
+       pci_free_resource_list(&host->windows);
+       kfree(host);
+       return NULL;
 }
 
 void pci_free_host_bridge(struct pci_host_bridge *host)
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index 418a426..ee17d9a 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -1893,9 +1893,6 @@ static struct pci_bus *__pci_create_root_bus(
 
        bridge->bus = b;
        b->bridge = get_device(&bridge->dev);
-       error = pcibios_root_bridge_prepare(bridge);
-       if (error)
-               goto put_dev;
 
        pcibios_set_root_bus_speed(bridge);
        device_enable_async_suspend(b->bridge);
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to