lkml.org 
[lkml]   [2010]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 4/9] Revert "PCI: allocate bus resources from the top down"
    From
    Date

    This reverts commit b126b4703afa4010b161784a43650337676dd03b.

    We're going back to the old behavior of allocating from bus resources
    in _CRS order.

    Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
    ---

    drivers/pci/bus.c | 53 +++++------------------------------------------------
    1 files changed, 5 insertions(+), 48 deletions(-)


    diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c
    index 5624db8..69546e9 100644
    --- a/drivers/pci/bus.c
    +++ b/drivers/pci/bus.c
    @@ -64,49 +64,6 @@ void pci_bus_remove_resources(struct pci_bus *bus)
    }
    }

    -/*
    - * Find the highest-address bus resource below the cursor "res". If the
    - * cursor is NULL, return the highest resource.
    - */
    -static struct resource *pci_bus_find_resource_prev(struct pci_bus *bus,
    - unsigned int type,
    - struct resource *res)
    -{
    - struct resource *r, *prev = NULL;
    - int i;
    -
    - pci_bus_for_each_resource(bus, r, i) {
    - if (!r)
    - continue;
    -
    - if ((r->flags & IORESOURCE_TYPE_BITS) != type)
    - continue;
    -
    - /* If this resource is at or past the cursor, skip it */
    - if (res) {
    - if (r == res)
    - continue;
    - if (r->end > res->end)
    - continue;
    - if (r->end == res->end && r->start > res->start)
    - continue;
    - }
    -
    - if (!prev)
    - prev = r;
    -
    - /*
    - * A small resource is higher than a large one that ends at
    - * the same address.
    - */
    - if (r->end > prev->end ||
    - (r->end == prev->end && r->start > prev->start))
    - prev = r;
    - }
    -
    - return prev;
    -}
    -
    /**
    * pci_bus_alloc_resource - allocate a resource from a parent bus
    * @bus: PCI bus
    @@ -132,10 +89,9 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
    resource_size_t),
    void *alignf_data)
    {
    - int ret = -ENOMEM;
    + int i, ret = -ENOMEM;
    struct resource *r;
    resource_size_t max = -1;
    - unsigned int type = res->flags & IORESOURCE_TYPE_BITS;

    type_mask |= IORESOURCE_IO | IORESOURCE_MEM;

    @@ -143,9 +99,10 @@ pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res,
    if (!(res->flags & IORESOURCE_MEM_64))
    max = PCIBIOS_MAX_MEM_32;

    - /* Look for space at highest addresses first */
    - r = pci_bus_find_resource_prev(bus, type, NULL);
    - for ( ; r; r = pci_bus_find_resource_prev(bus, type, r)) {
    + pci_bus_for_each_resource(bus, r, i) {
    + if (!r)
    + continue;
    +
    /* type_mask must match */
    if ((res->flags ^ r->flags) & type_mask)
    continue;


    \
     
     \ /
      Last update: 2010-12-16 18:41    [W:0.038 / U:60.288 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site