Re: DMA, CMA, coherence and performance

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Sun, Jan 5, 2014 at 8:02 AM, Peter Teoh <htmldeveloper@xxxxxxxxx> wrote:
I think this discussion should help you:


other failures:


and some guideline here:



As I don't have any specific crashdump or error information, nothing I can comment further about your problem.   It is quite difficult to make general comment.



On Fri, Jan 3, 2014 at 7:20 AM, Steven Bell <botsnlinux@xxxxxxxxx> wrote:
Hi,

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().

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).

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 (http://kernelnewbies.org/KernelMemoryAllocation) says that get_free_pages up to about 8MB are ok.  Is that a generalization based on typical memory fragmentation, or a guarantee?

Thanks,
Steven

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies




--
Regards,
Peter Teoh

Thanks for the reply and the links.  Unfortunately, they don't really answer my basic question - which is a general conceptual question, not a specific error or problem that I'm running into.

I want to allocate a contiguous 8MB buffer and use it for streaming DMA.  I don't need or want a coherent buffer, since I'm using streaming DMA, and so dma_alloc_coherent() seems like the wrong method to use.  Is that true, or should I use it anyway?  If not, what method do I use?

The DMA-API and DMA-API-HOWTO documents don't seem to say anything about allocating memory for streaming DMA operations.  Have I missed something?

Thanks,
Steven



_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux