Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -499,6 +499,26 @@ gart_map_sg(struct device *dev, struct scatterlist *sg, int nents, int dir)
	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 __init unsigned long check_iommu_size(unsigned long aper, u64 aper_size)
@@ -701,6 +721,7 @@ static struct dma_mapping_ops gart_dma_ops = {
	.sync_sg_for_device		= NULL,
	.map_sg				= gart_map_sg,
	.unmap_sg			= gart_unmap_sg,
	.alloc_coherent			= gart_alloc_coherent,
};

void gart_iommu_shutdown(void)