On Tue, 2019-01-15 at 16:20 +0100, hch@lst.de wrote:
On Tue, Jan 15, 2019 at 03:24:55PM +0100, Christian König wrote:
Yeah, indeed. Bounce buffers are an absolute no-go for GPUs.
If the DMA API finds that a piece of memory is not directly accessible by the GPU we need to return an error and not try to use bounce buffers behind the surface.
That is something which always annoyed me with the DMA API, which is otherwise rather cleanly defined.
That is exactly what I want to fix with my series to make DMA_ATTR_NON_CONSISTENT more useful and always available:
https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.linux...
With that you allocate the memory using dma_alloc_attrs with DMA_ATTR_NON_CONSISTENT, and use dma_sync_single_* to transfer ownership to the cpu and back to the device, with a gurantee that there won't be any bouncing. So far the interest by the parties that requested the feature has been rather lacklustre, though.
In the graphics case, it's probably because it doesn't fit the graphics use-cases:
1) Memory typically needs to be mappable by another device. (the "dma- buf" interface) 2) DMA buffers are exported to user-space and is sub-allocated by it. Mostly there are no GPU user-space kernel interfaces to sync / flush subregions and these syncs may happen on a smaller-than-cache-line granularity.
So to help the graphics driver, that coherent flag would be much more useful.
/Thomas