diff options
| author | Bjorn Helgaas <bjorn.helgaas@hp.com> | 2010-12-16 10:38:36 -0700 | 
|---|---|---|
| committer | Jesse Barnes <jbarnes@virtuousgeek.org> | 2010-12-17 10:00:54 -0800 | 
| commit | 6db45b76eaa08133187f2cb44d496de7e9503aa8 (patch) | |
| tree | 250b40b6ab6dcf9f9187996f3f954c9ca4457eba | |
| parent | d14125ecfee05473de46f06d992db109308c57a3 (diff) | |
Revert "PCI: allocate bus resources from the top down"
This reverts commit b126b4703afa4010b161784a43650337676dd03b.
We're going back to the old behavior of allocating from bus resources
in _CRS order.
Acked-by: H. Peter Anvin <hpa@zytor.com>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
| -rw-r--r-- | 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 5624db8c9ad0..69546e9213dd 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; | 
