<div dir="ltr"><div>Hi,<br><br></div><div>I&#39;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 &quot;right way&quot; 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&#39;t touched again until it gets reused with new data.  The resources I&#39;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&#39;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>