x86/pci: fix mmconfig detection with 32bit near 4g

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 <pterjan@mandriva.com>
Bisected-by: Pascal Terjan <pterjan@mandriva.com>
Tested-by: Pascal Terjan <pterjan@mandriva.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: stable@kernel.org
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>

authored by Yinghai Lu and committed by Jesse Barnes 75e613cd f79b1b14

+3 -3
+3 -3
arch/x86/pci/mmconfig-shared.c
··· 375 375 if (!fixmem32) 376 376 return AE_OK; 377 377 if ((mcfg_res->start >= fixmem32->address) && 378 - (mcfg_res->end <= (fixmem32->address + 378 + (mcfg_res->end < (fixmem32->address + 379 379 fixmem32->address_length))) { 380 380 mcfg_res->flags = 1; 381 381 return AE_CTRL_TERMINATE; ··· 392 392 return AE_OK; 393 393 394 394 if ((mcfg_res->start >= address.minimum) && 395 - (mcfg_res->end <= (address.minimum + address.address_length))) { 395 + (mcfg_res->end < (address.minimum + address.address_length))) { 396 396 mcfg_res->flags = 1; 397 397 return AE_CTRL_TERMINATE; 398 398 } ··· 418 418 struct resource mcfg_res; 419 419 420 420 mcfg_res.start = start; 421 - mcfg_res.end = end; 421 + mcfg_res.end = end - 1; 422 422 mcfg_res.flags = 0; 423 423 424 424 acpi_get_devices("PNP0C01", find_mboard_resource, &mcfg_res, NULL);