mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	Revert "PCI: allocate bus resources from the top down"
This reverts commit b126b4703a.
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>
			
			
This commit is contained in:
		
							parent
							
								
									d14125ecfe
								
							
						
					
					
						commit
						6db45b76ea
					
				
					 1 changed files with 5 additions and 48 deletions
				
			
		|  | @ -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; | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bjorn Helgaas
						Bjorn Helgaas