Re: Stable regression 2.6.29.3 vs 2.6.29.2

From: Yinghai Lu
Date: Tue Jun 02 2009 - 16:45:47 EST


Pascal Terjan wrote:
> Le mardi 02 juin 2009 à 10:24 -0700, Yinghai Lu a écrit :
> ACPI: Using IOAPIC for interrupt routing
> PCI: MCFG configuration 0: base f0000000 segment 0 buses 0 - 255
> PCI: MCFG area at f0000000 reserved in ACPI motherboard resources
> PCI: updated MCFG configuration 0: base f0000000 segment 0 buses 0 - 63
> PCI: Using MMCONFIG for extended config space

please check

[PATCH] x86/pci: fix mmconfig detection with 32bit need 4g

Pascal reported and bisected to commit:
| x86/PCI: don't call e820_all_mapped with -1 in the mmconfig case

for 32bit, mcfg_res->end could be 32bit only ( if 64 res is not used)
use end - 1 to pass the value in mcfg->end to avoid overflow

don't need to worry about e820 path. they are 64 bit always

Reported-by: Pascal Terjan <pterjan@xxxxxxxxxxxx>
Bisected-by: Pascal Terjan <pterjan@xxxxxxxxxxxx>
Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
Cc: stable@xxxxxxxxxx

---
arch/x86/pci/mmconfig-shared.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

Index: linux-2.6/arch/x86/pci/mmconfig-shared.c
===================================================================
--- linux-2.6.orig/arch/x86/pci/mmconfig-shared.c
+++ linux-2.6/arch/x86/pci/mmconfig-shared.c
@@ -375,7 +375,7 @@ static acpi_status __init check_mcfg_res
if (!fixmem32)
return AE_OK;
if ((mcfg_res->start >= fixmem32->address) &&
- (mcfg_res->end <= (fixmem32->address +
+ (mcfg_res->end < (fixmem32->address +
fixmem32->address_length))) {
mcfg_res->flags = 1;
return AE_CTRL_TERMINATE;
@@ -392,7 +392,7 @@ static acpi_status __init check_mcfg_res
return AE_OK;

if ((mcfg_res->start >= address.minimum) &&
- (mcfg_res->end <= (address.minimum + address.address_length))) {
+ (mcfg_res->end < (address.minimum + address.address_length))) {
mcfg_res->flags = 1;
return AE_CTRL_TERMINATE;
}
@@ -418,7 +418,7 @@ static int __init is_acpi_reserved(u64 s
struct resource mcfg_res;

mcfg_res.start = start;
- mcfg_res.end = end;
+ mcfg_res.end = end - 1;
mcfg_res.flags = 0;

acpi_get_devices("PNP0C01", find_mboard_resource, &mcfg_res, NULL);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/