<div dir="ltr"><div>Hi,<br><br></div><div>I'm working on a device driver for a video device which continuously reads and writes image frames using DMA. The frames are fairly large, in the range of 2-8MB, and I would like the buffers for them to be contiguous because of my hardware. My understanding is that using the contiguous memory allocator is the current "right way" to get the buffers, and that CMA operates entirely behind the scenes when calls are made to dma_alloc_coherent().<br>
</div><div><br></div><div>However, it seems that for this system, a streaming DMA setup would be more appropriate. The buffer gets filled with data once, handed to the device, and then isn't touched again until it gets reused with new data. The resources I've read have hinted that streaming DMA has some performance benefits over coherent DMA, so this seems like the way to go. But I haven't seen any discussion of how to use CMA with streaming DMA (or whether such a thing is even necessary).<br>
<br></div><div>Does the CMA also work behind get_free_pages, or other kernel memory allocation methods? Does it matter? The kernel newbies page on memory allocation (<a href="http://kernelnewbies.org/KernelMemoryAllocation">http://kernelnewbies.org/KernelMemoryAllocation</a>) says that get_free_pages up to about 8MB are ok. Is that a generalization based on typical memory fragmentation, or a guarantee?<br>
</div><div><br></div><div>Thanks,</div>Steven<br></div>