Skip to content

Commit

Permalink
x86/pci: fix mmconfig detection with 32bit near 4g
Browse files Browse the repository at this point in the history
Pascal reported and bisected a commit:
|	x86/PCI: don't call e820_all_mapped with -1 in the mmconfig case

which broke one system system.

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: Using MMCONFIG for extended config space

it didn't have
PCI: updated MCFG configuration 0: base f0000000 segment 0 buses 0 - 63
anymore, and try to use 0xf000000 - 0xffffffff for mmconfig

For 32bit, mcfg_res->end could be 32bit only (if 64 resources aren't used)
So use end - 1 to pass the value in mcfg->end to avoid overflow.

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

Reported-by: Pascal Terjan <[email protected]>
Bisected-by: Pascal Terjan <[email protected]>
Tested-by: Pascal Terjan <[email protected]>
Signed-off-by: Yinghai Lu <[email protected]>
Cc: [email protected]
Signed-off-by: Jesse Barnes <[email protected]>
  • Loading branch information
Yinghai Lu authored and jbarnes993 committed Jun 4, 2009
1 parent f79b1b1 commit 75e613c
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions arch/x86/pci/mmconfig-shared.c
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *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;
Expand All @@ -392,7 +392,7 @@ static acpi_status __init check_mcfg_resource(struct acpi_resource *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;
}
Expand All @@ -418,7 +418,7 @@ static int __init is_acpi_reserved(u64 start, u64 end, unsigned not_used)
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);
Expand Down

0 comments on commit 75e613c

Please sign in to comment.