} while(!pages); 
} while (!pages);  
static struct page *kimage_alloc_normal_control_pages(	struct kimage *image, unsigned int order){	/* Control pages are special, they are the intermediaries	 * that are needed while we copy the rest of the pages	 * to their final resting place.  As such they must	 * not conflict with either the destination addresses	 * or memory the kernel is already using.	 *	 * The only case where we really need more than one of	 * these are for architectures where we cannot disable	 * the MMU and must instead generate an identity mapped	 * page table for all of the memory.	 *	 * At worst this runs in O(N) of the image size.	 */	struct list_head extra_pages;	struct page *pages;	unsigned int count;	count = 1 << order;	INIT_LIST_HEAD(&extra_pages);	/* Loop while I can allocate a page and the page allocated	 * is a destination page.	 */	do {		unsigned long pfn, epfn, addr, eaddr;		pages = kimage_alloc_pages(GFP_KERNEL, order);		if (!pages)			break;		pfn   = page_to_pfn(pages);		epfn  = pfn + count;		addr  = pfn << PAGE_SHIFT;		eaddr = epfn << PAGE_SHIFT;		if ((epfn >= (KEXEC_CONTROL_MEMORY_LIMIT >> PAGE_SHIFT)) ||			kimage_is_destination_range(image, addr, eaddr))		{			list_add(&pages->lru, &extra_pages);			pages = NULL;		}	} while(!pages);	if (pages) {		/* Remember the allocated page... */		list_add(&pages->lru, &image->control_pages);		/* Because the page is already in it's destination		 * location we will never allocate another page at		 * that address.  Therefore kimage_alloc_pages		 * will not return it (again) and we don't need		 * to give it an entry in image->segment[].		 */	}	/* Deal with the destination pages I have inadvertently allocated.	 *	 * Ideally I would convert multi-page allocations into single	 * page allocations, and add everyting to image->dest_pages.	 *	 * For now it is simpler to just free the pages.	 */	kimage_free_page_list(&extra_pages);	return pages;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/72414d3f1d22fc3e311b162fca95c430048d38ce/kexec.c/clean/kernel/kexec.c