我正在考虑为DMA事务分配缓冲区。我读到有两种方法可以做到这一点 - 连贯映射或流映射。
现在,我们需要缓存一致缓冲区。但是,我们没有进行任何分散/聚集,因此我们希望dma_map_single
调用的好处。我们在bootargs中留出了一些连续的内存,所以我们总是有足够的连续内存。
所以我想知道,我们可以使用dma_alloc_coherent
返回的虚拟地址调用dma_map_single
然后调用dma_alloc_coherent
吗?然后,将返回的地图单一的物理地址设置为dma_alloc_coherent
在其调用中返回的dma句柄。
这有意义吗?或者这样做是多余/不正确的?
答案 0 :(得分:6)
你不能同时使用两者。但是你也试图解决一个不存在的问题。只需使用dma_alloc_coherent()
,它为您提供具有虚拟和物理地址的连续DMA内存缓冲区。 DMA到物理地址,用虚拟地址从CPU访问它。有什么问题?