Messages in this thread Patch in this message |  | | From | Lin Feng <> | Subject | [RFC PATCH] mm: memblock: optimize memblock_find_in_range_node() to minimize the search work | Date | Fri, 4 Jan 2013 17:24:53 +0800 |
| |
The memblock array is in ascending order and we traverse the memblock array in reverse order so we can add some simple check to reduce the search work.
Tejun fix a underflow bug in 5d53cb27d8, but I think we could break there for the same reason.
Cc: Tejun Heo <tj@kernel.org> Signed-off-by: Lin Feng <linfeng@cn.fujitsu.com> --- mm/memblock.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/mm/memblock.c b/mm/memblock.c index 6259055..a710557 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -111,11 +111,18 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start, end = max(start, end); for_each_free_mem_range_reverse(i, nid, &this_start, &this_end, NULL) { + /* + * exclude the regions out of the candidate range, since it's + * likely to find a suitable range, we ignore the worst case. + */ + if (this_start >= end) + continue; + this_start = clamp(this_start, start, end); this_end = clamp(this_end, start, end); if (this_end < size) - continue; + break; cand = round_down(this_end - size, align); if (cand >= this_start) -- 1.7.11.7
|  |