gfp |= GFP_DMA; 
gfp = (gfp & ~GFP_DMA32) | GFP_DMA; 
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_handle,		   gfp_t gfp){	void *memory;	unsigned long dma_mask = 0;	u64 bus;	if (!dev)		dev = &fallback_dev;	dma_mask = dev->coherent_dma_mask;	if (dma_mask == 0) 		dma_mask = 0xffffffff; 	/* Kludge to make it bug-to-bug compatible with i386. i386	   uses the normal dma_mask for alloc_coherent. */	dma_mask &= *dev->dma_mask; again:	memory = dma_alloc_pages(dev, gfp, get_order(size));	if (memory == NULL)		return NULL;	{		int high, mmu;		bus = virt_to_bus(memory);	        high = (bus + size) >= dma_mask;		mmu = high;		if (force_iommu && !(gfp & GFP_DMA)) 			mmu = 1;		if (no_iommu || dma_mask < 0xffffffffUL) { 			if (high) {				free_pages((unsigned long)memory,					   get_order(size));				if (swiotlb) {					return					swiotlb_alloc_coherent(dev, size,							       dma_handle,							       gfp);				}				if (!(gfp & GFP_DMA)) { 					gfp |= GFP_DMA; 					goto again;				}				return NULL;			}			mmu = 0; 		} 			memset(memory, 0, size); 		if (!mmu) { 			*dma_handle = virt_to_bus(memory);			return memory;		}	} 	*dma_handle = dma_map_area(dev, bus, size, PCI_DMA_BIDIRECTIONAL, 0);	if (*dma_handle == bad_dma_address)		goto error; 	flush_gart(dev);	return memory; 	error:	if (panic_on_overflow)		panic("dma_alloc_coherent: IOMMU overflow by %lu bytes\n", size);	free_pages((unsigned long)memory, get_order(size)); 	return NULL; }
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/47492d3667ec519172ab978bd8231b8c7152fa9d/pci-gart.c/clean/arch/x86_64/kernel/pci-gart.c