Messages in this thread Patch in this message |  | | Subject | Re: Regression with commit f9cde5f in 2.6.30-gitX | From | Jaswinder Singh Rajput <> | Date | Wed, 24 Jun 2009 17:46:27 +0530 |
| |
On Tue, 2009-06-23 at 20:33 -0500, Larry Finger wrote: > My latest pull from Linus's tree fails to boot. Bisection leads to the > commit entitled "x86/ACPI: Correct maximum allowed _CRS returned > resources and warn if exceeded" with hash > f9cde5ffed17bf74f6bef042d99edb0622f58576. I have been unable to > capture the first error message as it scrolls off the screen, but the > second hits the WARN_ON at drivers/ata/ahci.c:695 in routine > ahci_enable_ahci() because HOST_AHCI_EN is not set. >
This patch fixes boot failure on my AMD 64 laptop, can you please test this patch:
[PATCH] x86: fix _CRS resources return handling
We need to check for info->res_num and only handle for < PCI_BUS_NUM_RESOURCES
Also set info->bus->resource[info->res_num] for _CRS resources return handling
Fixed boot failure on some machine.
Reported-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: Jaswinder Singh Rajput <jaswinderrajput@gmail.com> --- arch/x86/pci/acpi.c | 16 ++++++++++------ 1 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index 16c3fda..0bc015f 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c @@ -69,6 +69,9 @@ setup_resource(struct acpi_resource *acpi_res, void *data) struct resource *root; int max_root_bus_resources = PCI_BUS_NUM_RESOURCES; + if (info->res_num >= PCI_BUS_NUM_RESOURCES) + return AE_OK; + status = resource_to_addr(acpi_res, &addr); if (!ACPI_SUCCESS(status)) return AE_OK; @@ -94,17 +97,18 @@ setup_resource(struct acpi_resource *acpi_res, void *data) if (bus_has_transparent_bridge(info->bus)) max_root_bus_resources -= 3; if (info->res_num >= max_root_bus_resources) { - printk(KERN_WARNING "PCI: Failed to allocate 0x%lx-0x%lx " - "from %s for %s due to _CRS returning more than " - "%d resource descriptors\n", (unsigned long) res->start, - (unsigned long) res->end, root->name, info->name, - max_root_bus_resources); + pr_warning("PCI: Failed to allocate 0x%lx-0x%lx " + "from %s for %s due to _CRS returning more than " + "%d resource descriptors\n", + (unsigned long)res->start, (unsigned long)res->end, + root->name, info->name, max_root_bus_resources); + info->bus->resource[info->res_num] = res; info->res_num++; return AE_OK; } if (insert_resource(root, res)) { - printk(KERN_ERR "PCI: Failed to allocate 0x%lx-0x%lx " + pr_err("PCI: Failed to allocate 0x%lx-0x%lx " "from %s for %s\n", (unsigned long) res->start, (unsigned long) res->end, root->name, info->name); } else { -- 1.6.0.6
|  |