lkml.org 
[lkml]   [2009]   [Nov]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 8/9] 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 file changed, 17 insertions(+), 6 deletions(-)

    Index: linux-2.6/drivers/pci/hotplug/pciehp_pci.c
    ===================================================================
    --- linux-2.6.orig/drivers/pci/hotplug/pciehp_pci.c
    +++ linux-2.6/drivers/pci/hotplug/pciehp_pci.c
    @@ -53,17 +53,15 @@ static int __ref pciehp_add_bridge(struc
    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
    (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;
    }



    \
     
     \ /
      Last update: 2009-11-25 21:05    [W:0.020 / U:61.104 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site