bootmem: Replace work_with_active_regions() with for_each_mem_pfn_range()
Callback based iteration is cumbersome and much less useful than for_each_*() iterator. This patch implements for_each_mem_pfn_range() which replaces work_with_active_regions(). All the current users of work_with_active_regions() are converted. This simplifies walking over early_node_map and will allow converting internal logics in page_alloc to use iterator instead of walking early_node_map directly, which in turn will enable moving node information to memblock. powerpc change is only compile tested. Signed-off-by: Tejun Heo <tj@kernel.org> Link: http://lkml.kernel.org/r/20110714074610.GD3455@htj.dyndns.org Cc: Yinghai Lu <yinghai@kernel.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:

committed by
H. Peter Anvin

parent
fc769a8e70
commit
5dfe8660a3
@@ -115,28 +115,13 @@ static void __init memblock_x86_subtract_reserved(struct range *range, int az)
|
||||
memblock_reserve_reserved_regions();
|
||||
}
|
||||
|
||||
struct count_data {
|
||||
int nr;
|
||||
};
|
||||
|
||||
static int __init count_work_fn(unsigned long start_pfn,
|
||||
unsigned long end_pfn, void *datax)
|
||||
{
|
||||
struct count_data *data = datax;
|
||||
|
||||
data->nr++;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init count_early_node_map(int nodeid)
|
||||
{
|
||||
struct count_data data;
|
||||
int i, cnt = 0;
|
||||
|
||||
data.nr = 0;
|
||||
work_with_active_regions(nodeid, count_work_fn, &data);
|
||||
|
||||
return data.nr;
|
||||
for_each_mem_pfn_range(i, nodeid, NULL, NULL, NULL)
|
||||
cnt++;
|
||||
return cnt;
|
||||
}
|
||||
|
||||
int __init __get_free_all_memory_range(struct range **rangep, int nodeid,
|
||||
|
Reference in New Issue
Block a user