Messages in this thread | | | Date | Wed, 13 Aug 2008 09:45:54 +0900 | Subject | Re: [PATCH 1/7] x86: add alloc_coherent dma_ops callback to GART driver | From | FUJITA Tomonori <> |
| |
On Tue, 12 Aug 2008 17:24:11 +0200 Joerg Roedel <joerg.roedel@amd.com> wrote:
> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> > --- > arch/x86/kernel/pci-gart_64.c | 21 +++++++++++++++++++++ > 1 files changed, 21 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c > index cdab678..55cc388 100644 > --- a/arch/x86/kernel/pci-gart_64.c > +++ b/arch/x86/kernel/pci-gart_64.c > @@ -499,6 +499,26 @@ error: > 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, 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;
It would be better to return a size-aligned memory as DMA-mapping.txt says (though I don't think that it doesn't matter much):
http://lkml.org/lkml/2008/8/8/555
I also think that x86 IOMMUs need to handle DMA_*BIT_MASK properly, don't we?
| |