map.physical = mi->bank[i].start; map.virtual = __phys_to_virt(map.physical); 
map.pfn = __phys_to_pfn(mi->bank[i].start); map.virtual = __phys_to_virt(mi->bank[i].start); 
bootmem_init_node(int node, int initrd_node, struct meminfo *mi){	unsigned long zone_size[MAX_NR_ZONES], zhole_size[MAX_NR_ZONES];	unsigned long start_pfn, end_pfn, boot_pfn;	unsigned int boot_pages;	pg_data_t *pgdat;	int i;	start_pfn = -1UL;	end_pfn = 0;	/*	 * Calculate the pfn range, and map the memory banks for this node.	 */	for_each_nodebank(i, mi, node) {		unsigned long start, end;		struct map_desc map;		start = mi->bank[i].start >> PAGE_SHIFT;		end = (mi->bank[i].start + mi->bank[i].size) >> PAGE_SHIFT;		if (start_pfn > start)			start_pfn = start;		if (end_pfn < end)			end_pfn = end;		map.physical = mi->bank[i].start;		map.virtual = __phys_to_virt(map.physical);		map.length = mi->bank[i].size;		map.type = MT_MEMORY;		create_mapping(&map);	}	/*	 * If there is no memory in this node, ignore it.	 */	if (end_pfn == 0)		return end_pfn;	/*	 * Allocate the bootmem bitmap page.	 */	boot_pages = bootmem_bootmap_pages(end_pfn - start_pfn);	boot_pfn = find_bootmap_pfn(node, mi, boot_pages);	/*	 * Initialise the bootmem allocator for this node, handing the	 * memory banks over to bootmem.	 */	node_set_online(node);	pgdat = NODE_DATA(node);	init_bootmem_node(pgdat, boot_pfn, start_pfn, end_pfn);	for_each_nodebank(i, mi, node)		free_bootmem_node(pgdat, mi->bank[i].start, mi->bank[i].size);	/*	 * Reserve the bootmem bitmap for this node.	 */	reserve_bootmem_node(pgdat, boot_pfn << PAGE_SHIFT,			     boot_pages << PAGE_SHIFT);#ifdef CONFIG_BLK_DEV_INITRD	/*	 * If the initrd is in this node, reserve its memory.	 */	if (node == initrd_node) {		reserve_bootmem_node(pgdat, phys_initrd_start,				     phys_initrd_size);		initrd_start = __phys_to_virt(phys_initrd_start);		initrd_end = initrd_start + phys_initrd_size;	}#endif	/*	 * Finally, reserve any node zero regions.	 */	if (node == 0)		reserve_node_zero(pgdat);	/*	 * initialise the zones within this node.	 */	memset(zone_size, 0, sizeof(zone_size));	memset(zhole_size, 0, sizeof(zhole_size));	/*	 * The size of this node has already been determined.  If we need	 * to do anything fancy with the allocation of this memory to the	 * zones, now is the time to do it.	 */	zone_size[0] = end_pfn - start_pfn;	/*	 * For each bank in this node, calculate the size of the holes.	 *  holes = node_size - sum(bank_sizes_in_node)	 */	zhole_size[0] = zone_size[0];	for_each_nodebank(i, mi, node)		zhole_size[0] -= mi->bank[i].size >> PAGE_SHIFT;	/*	 * Adjust the sizes according to any special requirements for	 * this machine type.	 */	arch_adjust_zones(node, zone_size, zhole_size);	free_area_init_node(node, pgdat, zone_size, start_pfn, zhole_size);	return end_pfn;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/9769c2468d423a1562dd59a5db250bd0a5533ec9/init.c/clean/arch/arm/mm/init.c