dma_addr_t *dma_handle, int flags) 
dma_addr_t *dma_handle, gfp_t flags) 
swiotlb_alloc_coherent(struct device *hwdev, size_t size,		       dma_addr_t *dma_handle, int flags){	unsigned long dev_addr;	void *ret;	int order = get_order(size);	/*	 * XXX fix me: the DMA API should pass us an explicit DMA mask	 * instead, or use ZONE_DMA32 (ia64 overloads ZONE_DMA to be a ~32	 * bit range instead of a 16MB one).	 */	flags |= GFP_DMA;	ret = (void *)__get_free_pages(flags, order);	if (ret && address_needs_mapping(hwdev, virt_to_phys(ret))) {		/*		 * The allocated memory isn't reachable by the device.		 * Fall back on swiotlb_map_single().		 */		free_pages((unsigned long) ret, order);		ret = NULL;	}	if (!ret) {		/*		 * We are either out of memory or the device can't DMA		 * to GFP_DMA memory; fall back on		 * swiotlb_map_single(), which will grab memory from		 * the lowest available address range.		 */		dma_addr_t handle;		handle = swiotlb_map_single(NULL, NULL, size, DMA_FROM_DEVICE);		if (dma_mapping_error(handle))			return NULL;		ret = phys_to_virt(handle);	}	memset(ret, 0, size);	dev_addr = virt_to_phys(ret);	/* Confirm address can be DMA'd by device */	if (address_needs_mapping(hwdev, dev_addr)) {		printk("hwdev DMA mask = 0x%016Lx, dev_addr = 0x%016lx\n",		       (unsigned long long)*hwdev->dma_mask, dev_addr);		panic("swiotlb_alloc_coherent: allocated memory is out of "		      "range for device");	}	*dma_handle = dev_addr;	return ret;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/06a544971fad0992fe8b92c5647538d573089dd4/swiotlb.c/buggy/arch/ia64/lib/swiotlb.c