On Thu, Jul 20, 2023 at 08:43:18AM +0200, Christoph Hellwig wrote: > On Thu, Jul 20, 2023 at 02:30:04AM -0400, Michael S. Tsirkin wrote: > > sure, they are not hard to generate ;) > > > > https://lore.kernel.org/all/20230710034237.12391-11-xuanzhuo%40linux.alibaba.com > > Thanks, I'll chime in there. > > > > > Looks like there's really little else can be done: there's a > > > > shared page we allow DMA into, so we sync periodically. > > > > Then when we unmap we really do not need that data > > > > synced again. > > > > > > > > What exactly is wrong with this? > > > > > > A "shared" page without ownership can't work with the streaming > > > DMA API (dma_map_*) at all. You need to use dma_alloc_coherent > > > so that it is mapped uncached. > > > > Hmm confused. Based on both documentation and code I think this works: > > > > dma_map > > dma_sync > > dma_sync > > dma_sync > > dma_sync > > dma_unmap(DMA_ATTR_SKIP_CPU_SYNC) > > > > right? > > Depends on your definition of "shared". If there is always a clear > owner at a given time you can games with lots of syncs that transfer > ownership. If there is no clear ownership, and the "device" just > DMAs into the buffer at random times and the host checks bits in > there we need to map the buffer uncached. > > I'll chime in in the thread. Each chunk of that buffer is DMA'd into separately and then sync'd afterwards. > > > > -- > > MST > ---end quoted text---