x86-64, gart: Fix allocation with memblock
When trying to change alloc_bootmem with memblock to go with real top-down
Found one old system:
[ 0.000000] Node 0: aperture @
ac000000 size 64 MB
[ 0.000000] Aperture pointing to e820 RAM. Ignoring.
[ 0.000000] Your BIOS doesn't leave a aperture memory hole
[ 0.000000] Please enable the IOMMU option in the BIOS setup
[ 0.000000] This costs you 64 MB of RAM
[ 0.000000] memblock_x86_reserve_range: [0x2020000000-0x2023ffffff] aperture64
[ 0.000000] Cannot allocate aperture memory hole (
ffff882020000000,65536K)
[ 0.000000] memblock_x86_free_range: [0x2020000000-0x2023ffffff]
[ 0.000000] Kernel panic - not syncing: Not enough memory for aperture
[ 0.000000] Pid: 0, comm: swapper Not tainted
2.6.37-rc5-tip-yh-06229-gb792dc2-dirty #331
[ 0.000000] Call Trace:
[ 0.000000] [<
ffffffff81cf50fe>] ? panic+0x91/0x1a3
[ 0.000000] [<
ffffffff827c66b2>] ? gart_iommu_hole_init+0x3d7/0x4a3
[ 0.000000] [<
ffffffff81d026a9>] ? _etext+0x0/0x3
[ 0.000000] [<
ffffffff827ba940>] ? pci_iommu_alloc+0x47/0x71
[ 0.000000] [<
ffffffff827c820b>] ? mem_init+0x19/0xec
[ 0.000000] [<
ffffffff827b3c40>] ? start_kernel+0x20a/0x3e8
[ 0.000000] [<
ffffffff827b32cc>] ? x86_64_start_reservations+0x9c/0xa0
[ 0.000000] [<
ffffffff827b33e4>] ? x86_64_start_kernel+0x114/0x11b
it means __alloc_bootmem_nopanic() get too high for that aperture.
Use memblock_find_in_range() with limit directly.
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
LKML-Reference: <
4D0C0740.90104@kernel.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>