diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-26 21:45:41 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-26 21:45:41 +0100 |
commit | 2437dcbf555bff04e4ee8b8dba4587f946c1cd3d (patch) | |
tree | f04f3ed779c25caa933744d2d5965ca4e297f05d /mm | |
parent | Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/gee... (diff) | |
parent | Merge branch 'rcu/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/pa... (diff) | |
download | linux-2437dcbf555bff04e4ee8b8dba4587f946c1cd3d.tar.xz linux-2437dcbf555bff04e4ee8b8dba4587f946c1cd3d.zip |
Merge branch 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
* 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
rcu: Add missing __cpuinit annotation in rcutorture code
sched: Add "const" to is_idle_task() parameter
rcu: Make rcutorture bool parameters really bool (core code)
memblock: Fix alloc failure due to dumb underflow protection in memblock_find_in_range_node()
Diffstat (limited to 'mm')
-rw-r--r-- | mm/memblock.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/mm/memblock.c b/mm/memblock.c index 2f55f19b7c86..77b5f227e1d8 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -106,14 +106,17 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start, if (end == MEMBLOCK_ALLOC_ACCESSIBLE) end = memblock.current_limit; - /* adjust @start to avoid underflow and allocating the first page */ - start = max3(start, size, (phys_addr_t)PAGE_SIZE); + /* avoid allocating the first page */ + start = max_t(phys_addr_t, start, PAGE_SIZE); end = max(start, end); for_each_free_mem_range_reverse(i, nid, &this_start, &this_end, NULL) { this_start = clamp(this_start, start, end); this_end = clamp(this_end, start, end); + if (this_end < size) + continue; + cand = round_down(this_end - size, align); if (cand >= this_start) return cand; |