On Tue, Sep 24, 2013 at 06:06:41PM +0800, Zhang Yanfei wrote: > +/** > + * memory_map_top_down - Map [map_start, map_end) top down > + * @map_start: start address of the target memory range > + * @map_end: end address of the target memory range > + * > + * This function will setup direct mapping for memory range [map_start, map_end) > + * in a heuristic way. In the beginning, step_size is small. The more memory we > + * map memory in the next loop. > + */ The comment reads a bit weird to me. The step size is increased gradually but that really isn't really a heuristic and it doesn't mention mapping direction. ... > @@ -430,19 +430,13 @@ void __init init_mem_mapping(void) > min_pfn_mapped = real_end >> PAGE_SHIFT; > last_start = start = real_end; > > - /* > - * We start from the top (end of memory) and go to the bottom. > - * The memblock_find_in_range() gets us a block of RAM from the > - * end of RAM in [min_pfn_mapped, max_pfn_mapped) used as new pages > - * for page table. > - */ I think this comment should stay here with the variable names updated. > - while (last_start > ISA_END_ADDRESS) { > + while (last_start > map_start) { > if (last_start > step_size) { > start = round_down(last_start - 1, step_size); > - if (start < ISA_END_ADDRESS) > - start = ISA_END_ADDRESS; > + if (start < map_start) > + start = map_start; > } else > - start = ISA_END_ADDRESS; > + start = map_start; > new_mapped_ram_size = init_range_memory_mapping(start, > last_start); > last_start = start; > @@ -453,8 +447,32 @@ void __init init_mem_mapping(void) > mapped_ram_size += new_mapped_ram_size; > } > > - if (real_end < end) > - init_range_memory_mapping(real_end, end); > + if (real_end < map_end) > + init_range_memory_mapping(real_end, map_end); > +} > + > +void __init init_mem_mapping(void) > +{ > + unsigned long end; > + > + probe_page_size_mask(); > + > +#ifdef CONFIG_X86_64 > + end = max_pfn << PAGE_SHIFT; > +#else > + end = max_low_pfn << PAGE_SHIFT; > +#endif > + > + /* the ISA range is always mapped regardless of memory holes */ > + init_memory_mapping(0, ISA_END_ADDRESS); > + > + /* > + * We start from the top (end of memory) and go to the bottom. > + * The memblock_find_in_range() gets us a block of RAM from the > + * end of RAM in [min_pfn_mapped, max_pfn_mapped) used as new pages > + * for page table. > + */ And just mention the range and direction in the comment here? > + memory_map_top_down(ISA_END_ADDRESS, end); Thanks. -- tejun -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>