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... >>> How about this one?