/* * This can potentially allocate memory, and does its own * internal locking. */ sparse_index_init(pfn_to_section_nr(phys_start_pfn), pgdat->node_id);  pgdat_resize_lock(pgdat, &flags); memmap = __kmalloc_section_memmap(nr_pages); ret = sparse_add_one_section(zone, phys_start_pfn, memmap); pgdat_resize_unlock(pgdat, &flags);  if (ret <= 0) { /* the mem_map didn't get used */ if (memmap >= (struct page *)VMALLOC_START && memmap < (struct page *)VMALLOC_END) vfree(memmap); else free_pages((unsigned long)memmap, get_order(sizeof(struct page) * nr_pages)); } 
ret = sparse_add_one_section(zone, phys_start_pfn, nr_pages); 
static int __add_section(struct zone *zone, unsigned long phys_start_pfn){	struct pglist_data *pgdat = zone->zone_pgdat;	int nr_pages = PAGES_PER_SECTION;	struct page *memmap;	int ret;	/*	 * This can potentially allocate memory, and does its own	 * internal locking.	 */	sparse_index_init(pfn_to_section_nr(phys_start_pfn), pgdat->node_id);	pgdat_resize_lock(pgdat, &flags);	memmap = __kmalloc_section_memmap(nr_pages);	ret = sparse_add_one_section(zone, phys_start_pfn, memmap);	pgdat_resize_unlock(pgdat, &flags);	if (ret <= 0) {		/* the mem_map didn't get used */		if (memmap >= (struct page *)VMALLOC_START &&		    memmap < (struct page *)VMALLOC_END)			vfree(memmap);		else			free_pages((unsigned long)memmap,				   get_order(sizeof(struct page) * nr_pages));	}	if (ret < 0)		return ret;	__add_zone(zone, phys_start_pfn);	return register_new_memory(__pfn_to_section(phys_start_pfn));}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/0b0acbec1bed75ec1e1daa7f7006323a2a2b2844/memory_hotplug.c/buggy/mm/memory_hotplug.c