Commit 94581094 authored by Joerg Roedel's avatar Joerg Roedel Committed by Ingo Molnar

x86: add alloc_coherent dma_ops callback to GART driver

[ v2 - x86: make gart_alloc_coherent return zeroed memory

  FUJITA Tomonori pointed it out that the dma_alloc_coherent function
  should return memory set to zero. This patch adds this to the GART
  implementation too. ]
Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 1fca2542
...@@ -499,6 +499,26 @@ gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir) ...@@ -499,6 +499,26 @@ gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir)
return 0; return 0;
} }
/* allocate and map a coherent mapping */
static void *
gart_alloc_coherent(struct device *dev, size_t size, dma_addr_t *dma_addr,
gfp_t flag)
{
void *vaddr;
vaddr = (void *)__get_free_pages(flag | __GFP_ZERO, get_order(size));
if (!vaddr)
return NULL;
*dma_addr = gart_map_single(dev, __pa(vaddr), size, DMA_BIDIRECTIONAL);
if (*dma_addr != bad_dma_address)
return vaddr;
free_pages((unsigned long)vaddr, get_order(size));
return NULL;
}
static int no_agp; static int no_agp;
static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size) static __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size)
...@@ -701,6 +721,7 @@ static struct dma_mapping_ops gart_dma_ops = { ...@@ -701,6 +721,7 @@ static struct dma_mapping_ops gart_dma_ops = {
.sync_sg_for_device = NULL, .sync_sg_for_device = NULL,
.map_sg = gart_map_sg, .map_sg = gart_map_sg,
.unmap_sg = gart_unmap_sg, .unmap_sg = gart_unmap_sg,
.alloc_coherent = gart_alloc_coherent,
}; };
void gart_iommu_shutdown(void) void gart_iommu_shutdown(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment