mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	[IA64] Stop multiple pci_claim_resource() call for the same resource
This patch fixes the bug that pci_claim_resource() is called multiple times for the same P2P bridge's resource structures if P2P bridges require their own PCI I/O resources. Signed-off-by: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
		
							parent
							
								
									1681b8e158
								
							
						
					
					
						commit
						7b9c8ba2d6
					
				
					 1 changed files with 14 additions and 5 deletions
				
			
		|  | @ -454,14 +454,13 @@ static int __devinit is_valid_resource(struct pci_dev *dev, int idx) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | ||||
| static void __devinit | ||||
| pcibios_fixup_resources(struct pci_dev *dev, int start, int limit) | ||||
| { | ||||
| 	struct pci_bus_region region; | ||||
| 	int i; | ||||
| 	int limit = (dev->hdr_type == PCI_HEADER_TYPE_NORMAL) ? \ | ||||
| 		PCI_BRIDGE_RESOURCES : PCI_NUM_RESOURCES; | ||||
| 
 | ||||
| 	for (i = 0; i < limit; i++) { | ||||
| 	for (i = start; i < limit; i++) { | ||||
| 		if (!dev->resource[i].flags) | ||||
| 			continue; | ||||
| 		region.start = dev->resource[i].start; | ||||
|  | @ -472,6 +471,16 @@ static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| static void __devinit pcibios_fixup_device_resources(struct pci_dev *dev) | ||||
| { | ||||
| 	pcibios_fixup_resources(dev, 0, PCI_BRIDGE_RESOURCES); | ||||
| } | ||||
| 
 | ||||
| static void __devinit pcibios_fixup_bridge_resources(struct pci_dev *dev) | ||||
| { | ||||
| 	pcibios_fixup_resources(dev, PCI_BRIDGE_RESOURCES, PCI_NUM_RESOURCES); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  *  Called after each bus is probed, but before its children are examined. | ||||
|  */ | ||||
|  | @ -482,7 +491,7 @@ pcibios_fixup_bus (struct pci_bus *b) | |||
| 
 | ||||
| 	if (b->self) { | ||||
| 		pci_read_bridge_bases(b); | ||||
| 		pcibios_fixup_device_resources(b->self); | ||||
| 		pcibios_fixup_bridge_resources(b->self); | ||||
| 	} | ||||
| 	list_for_each_entry(dev, &b->devices, bus_list) | ||||
| 		pcibios_fixup_device_resources(dev); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Kenji Kaneshige
						Kenji Kaneshige