Hello toshi-san, On 09/14/2013 05:53 AM, Toshi Kani wrote: > On Fri, 2013-09-13 at 17:30 +0800, Tang Chen wrote: > : >> @@ -100,8 +180,7 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start, >> phys_addr_t end, phys_addr_t size, >> phys_addr_t align, int nid) >> { >> - phys_addr_t this_start, this_end, cand; >> - u64 i; >> + phys_addr_t ret; >> >> /* pump up @end */ >> if (end == MEMBLOCK_ALLOC_ACCESSIBLE) >> @@ -111,18 +190,22 @@ phys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t start, >> 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 (memblock_direction_bottom_up()) { >> + /* >> + * MEMBLOCK_ALLOC_ACCESSIBLE is 0, which is less than the end >> + * of kernel image. So callers specify MEMBLOCK_ALLOC_ACCESSIBLE >> + * as @start is OK. >> + */ >> + start = max(start, __pa_symbol(_end)); /* End of kernel image. */ >> >> - if (this_end < size) >> - continue; >> + ret = __memblock_find_range(start, end, size, align, nid); >> + if (ret) >> + return ret; >> >> - cand = round_down(this_end - size, align); >> - if (cand >= this_start) >> - return cand; >> + pr_warn("memblock: Failed to allocate memory in bottom up direction. Now try top down direction.\n"); > > Is there any chance that this retry will succeed given that start and > end are still the same? Thanks for pointing this. We've made a mistake here. If the original start is less than __pa_symbol(_end), and if the bottom up search fails, then the top down search deserves a try with the original start argument. > > Thanks, > -Toshi > > >> } >> - return 0; >> + >> + return __memblock_find_range_rev(start, end, size, align, nid); >> } >> >> /** > > > -- Thanks. Zhang Yanfei -- To unsubscribe from this list: send the line "unsubscribe linux-doc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html