Messages in this thread | | | From | Arnd Bergmann <> | Subject | Re: [Linaro-mm-sig] [RFC] ARM DMA mapping TODO, v1 | Date | Thu, 28 Apr 2011 14:28:56 +0200 |
| |
On Thursday 28 April 2011, Russell King - ARM Linux wrote: > What I'd suggest is that dma_alloc_noncoherent() should be architecture > independent, and should call into whatever iommu support the device has > to setup an approprite iommu mapping. IOW, I don't see any need for > every architecture to provide its own dma_alloc_noncoherent() allocation > function - or indeed every iommu implementation to deal with the > allocation issues either.
Almost all architectures today define dma_alloc_noncoherent to dma_alloc_coherent, which is totally fine on architectures where cacheable coherent mappings are the default or where we don't need to flush individual cache lines for dma_sync_*.
The problem with backing either of the two with alloc_pages or alloc_pages_exact is that you cannot do large allocation when physical memory is fragmented, even if you have an IOMMU.
IMHO the allocation for both dma_alloc_coherent and dma_alloc_noncoherent should therefore depend on whether you have an IOMMU. If you do, you can easily allocate megabytes, e.g. for use as a frame buffer.
Arnd
| |