Messages in this thread Patch in this message | | | From | Yinghai Lu <> | Subject | [PATCH 01/11] memblock: Don't adjust size in memblock_find_base() | Date | Mon, 7 Feb 2011 15:17:02 -0800 |
| |
While applying patch to use memblock to find aperture for 64bit x86. Ingo found system with 1g + force_iommu
> No AGP bridge found > Node 0: aperture @ 38000000 size 32 MB > Aperture pointing to e820 RAM. Ignoring. > Your BIOS doesn't leave a aperture memory hole > Please enable the IOMMU option in the BIOS setup > This costs you 64 MB of RAM > Cannot allocate aperture memory hole (0,65536K)
the corresponding code: addr = memblock_find_in_range(0, 1ULL<<32, aper_size, 512ULL<<20); if (addr == MEMBLOCK_ERROR || addr + aper_size > 0xffffffff) { printk(KERN_ERR "Cannot allocate aperture memory hole (%lx,%uK)\n", addr, aper_size>>10); return 0; } memblock_x86_reserve_range(addr, addr + aper_size, "aperture64")
it failes because memblock core code align the size with 512M. that could make size way too big.
So don't align the size in that case.
acctually __memblock_alloc_base, the another caller already align that before calling that function.
BTW. x86 does not use __memblock_alloc_base...
Signed-off-by: Yinghai Lu <yinghai@kernel.org> --- mm/memblock.c | 2 -- 1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/mm/memblock.c b/mm/memblock.c index bdba245..4618fda 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -137,8 +137,6 @@ static phys_addr_t __init_memblock memblock_find_base(phys_addr_t size, BUG_ON(0 == size); - size = memblock_align_up(size, align); - /* Pump up max_addr */ if (end == MEMBLOCK_ALLOC_ACCESSIBLE) end = memblock.current_limit; -- 1.7.1
| |