diff mbox

[Bugfix,1/2] x86/PCI/ACPI: Ignore resources consumed by host bridge itself

Message ID 1425458832-28777-1-git-send-email-jiang.liu@linux.intel.com (mailing list archive)
State New, archived
Delegated to: Bjorn Helgaas
Headers show

Commit Message

Jiang Liu March 4, 2015, 8:47 a.m. UTC
When parsing resources for PCI host bridge, we should ignore resources
consumed by host bridge itself and only report window resources available
to child PCI busses.

Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
---
 arch/x86/pci/acpi.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

Comments

Rafael J. Wysocki March 4, 2015, 2:25 p.m. UTC | #1
On Wednesday, March 04, 2015 04:47:11 PM Jiang Liu wrote:
> When parsing resources for PCI host bridge, we should ignore resources
> consumed by host bridge itself and only report window resources available
> to child PCI busses.
> 
> Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>

Queued up for 4.0-rc3, thanks!

> ---
>  arch/x86/pci/acpi.c |   11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
> index 6ac273832f28..e4695985f9de 100644
> --- a/arch/x86/pci/acpi.c
> +++ b/arch/x86/pci/acpi.c
> @@ -331,7 +331,7 @@ static void probe_pci_root_info(struct pci_root_info *info,
>  				struct list_head *list)
>  {
>  	int ret;
> -	struct resource_entry *entry;
> +	struct resource_entry *entry, *tmp;
>  
>  	sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
>  	info->bridge = device;
> @@ -345,8 +345,13 @@ static void probe_pci_root_info(struct pci_root_info *info,
>  		dev_dbg(&device->dev,
>  			"no IO and memory resources present in _CRS\n");
>  	else
> -		resource_list_for_each_entry(entry, list)
> -			entry->res->name = info->name;
> +		resource_list_for_each_entry_safe(entry, tmp, list) {
> +			if ((entry->res->flags & IORESOURCE_WINDOW) == 0 ||
> +			    (entry->res->flags & IORESOURCE_DISABLED))
> +				resource_list_destroy_entry(entry);
> +			else
> +				entry->res->name = info->name;
> +		}
>  }
>  
>  struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
>
diff mbox

Patch

diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
index 6ac273832f28..e4695985f9de 100644
--- a/arch/x86/pci/acpi.c
+++ b/arch/x86/pci/acpi.c
@@ -331,7 +331,7 @@  static void probe_pci_root_info(struct pci_root_info *info,
 				struct list_head *list)
 {
 	int ret;
-	struct resource_entry *entry;
+	struct resource_entry *entry, *tmp;
 
 	sprintf(info->name, "PCI Bus %04x:%02x", domain, busnum);
 	info->bridge = device;
@@ -345,8 +345,13 @@  static void probe_pci_root_info(struct pci_root_info *info,
 		dev_dbg(&device->dev,
 			"no IO and memory resources present in _CRS\n");
 	else
-		resource_list_for_each_entry(entry, list)
-			entry->res->name = info->name;
+		resource_list_for_each_entry_safe(entry, tmp, list) {
+			if ((entry->res->flags & IORESOURCE_WINDOW) == 0 ||
+			    (entry->res->flags & IORESOURCE_DISABLED))
+				resource_list_destroy_entry(entry);
+			else
+				entry->res->name = info->name;
+		}
 }
 
 struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)