lkml.org 
[lkml]   [2010]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 07/11] pci: pciehp clean flow in pciehp_configure_device
    move out bus_size_bridges and assign resources out of pciehp_add_bridge()
    and at last do them all together one time including slot bridge, to avoid to
    call assign resources several times, when there are several bridges under the
    slot bridge.
    use pci_assign_nassigned_bridge_resources

    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    ---
    drivers/pci/hotplug/pciehp_pci.c | 23 +++++++++++++++++------
    1 files changed, 17 insertions(+), 6 deletions(-)

    diff --git a/drivers/pci/hotplug/pciehp_pci.c b/drivers/pci/hotplug/pciehp_pci.c
    index 2173310..0a16444 100644
    --- a/drivers/pci/hotplug/pciehp_pci.c
    +++ b/drivers/pci/hotplug/pciehp_pci.c
    @@ -53,17 +53,15 @@ static int __ref pciehp_add_bridge(struct pci_dev *dev)
    busnr = pci_scan_bridge(parent, dev, busnr, pass);
    if (!dev->subordinate)
    return -1;
    - pci_bus_size_bridges(dev->subordinate);
    - pci_bus_assign_resources(parent);
    - pci_enable_bridges(parent);
    - pci_bus_add_devices(parent);
    +
    return 0;
    }

    int pciehp_configure_device(struct slot *p_slot)
    {
    struct pci_dev *dev;
    - struct pci_bus *parent = p_slot->ctrl->pcie->port->subordinate;
    + struct pci_dev *bridge = p_slot->ctrl->pcie->port;
    + struct pci_bus *parent = bridge->subordinate;
    int num, fn;
    struct controller *ctrl = p_slot->ctrl;

    @@ -96,12 +94,25 @@ int pciehp_configure_device(struct slot *p_slot)
    (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)) {
    pciehp_add_bridge(dev);
    }
    + pci_dev_put(dev);
    + }
    +
    + pci_assign_unassigned_bridge_resources(bridge);
    +
    + for (fn = 0; fn < 8; fn++) {
    + dev = pci_get_slot(parent, PCI_DEVFN(0, fn));
    + if (!dev)
    + continue;
    + if ((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) {
    + pci_dev_put(dev);
    + continue;
    + }
    pci_configure_slot(dev);
    pci_dev_put(dev);
    }

    - pci_bus_assign_resources(parent);
    pci_bus_add_devices(parent);
    +
    return 0;
    }

    --
    1.6.4.2


    \
     
     \ /
      Last update: 2010-01-16 03:47    [W:4.097 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site