On Thu, Aug 22, 2013 at 08:08:09PM +0800, Wanpeng Li wrote: >On Wed, Aug 21, 2013 at 10:19:52PM -0700, Yinghai Lu wrote: >>On Wed, Aug 21, 2013 at 12:29 AM, Wanpeng Li wrote: >>> Hi Yinghai, >>> On Tue, Aug 20, 2013 at 09:28:29PM -0700, Yinghai Lu wrote: >>>>On Tue, Aug 20, 2013 at 8:11 PM, Wanpeng Li wrote: >>>>> Hi Yinghai, >>>>> On Tue, Aug 20, 2013 at 05:02:17PM -0700, Yinghai Lu wrote: >>>>>>>> - /* ok, last chunk */ >>>>>>>> - sparse_early_usemaps_alloc_node(usemap_map, pnum_begin, NR_MEM_SECTIONS, >>>>>>>> - usemap_count, nodeid_begin); >>>>>>>> + alloc_usemap_and_memmap(usemap_map, true); >>>>>> >>>>>>alloc_usemap_and_memmap() is somehow confusing. >>>>>> >>>>>>Please check if you can pass function pointer instead of true/false. >>>>>> >>>>> >>>>> sparse_early_usemaps_alloc_node and sparse_early_mem_maps_alloc_node is >>>>> similar, however, one has a parameter unsigned long ** and the other has >>>>> struct page **. function pointer can't help, isn't it? ;-) >>>> >>>>you could have one generic function pointer like >>>>void *alloc_func(void *data); >>>> >>>>and in the every alloc function, have own struct data to pass in/out... >>>> > Sorry send you the wrong version, how about this one?