Messages in this thread | | | Date | Fri, 24 Jan 2020 11:25:44 +0900 | From | Sergey Senozhatsky <> | Subject | Re: [RFC][PATCH 13/15] videobuf2: do not sync buffers for DMABUF queues |
| |
On (20/01/23 12:35), Hans Verkuil wrote: > On 1/22/20 6:05 AM, Sergey Senozhatsky wrote: > > On (20/01/10 11:30), Hans Verkuil wrote:
[..]
> But whatever was written in the buffer is going to be overwritten anyway. > > Unless I am mistaken the current situation is that the cache syncs are done > in both prepare and finish, regardless of the DMA direction. > > I would keep that behavior to avoid introducing any unexpected regressions.
OK.
> Then, if q->allow_cache_hint is set, then default to a cache sync (cache clean) > in the prepare for OUTPUT buffers and a cache sync (cache invalidate) in the > finish for CAPTURE buffers.
We alter default cache sync behaviour based both on queue ->memory type and queue ->dma_dir. Shall both of those cases depend on ->allow_cache_hints, or q->memory can be independent?
static void set_buffer_cache_hints(struct vb2_queue *q, struct vb2_buffer *vb, struct v4l2_buffer *b) { if (!q->allow_cache_hints) return;
/* * DMA exporter should take care of cache syncs, so we can avoid * explicit ->prepare()/->finish() syncs. For other ->memory types * we always need ->prepare() or/and ->finish() cache sync. */ if (q->memory == VB2_MEMORY_DMABUF) { vb->need_cache_sync_on_finish = 0; vb->need_cache_sync_on_prepare = 0; return; }
/* * ->finish() cache sync can be avoided when queue direction is * TO_DEVICE. */ if (q->dma_dir == DMA_TO_DEVICE) vb->need_cache_sync_on_finish = 0; else vb->need_cache_sync_on_finish = 1;
/* * ->prepare() cache sync can be avoided when queue direction is * FROM_DEVICE. */ if (q->dma_dir == DMA_FROM_DEVICE) vb->need_cache_sync_on_prepare = 0; else vb->need_cache_sync_on_prepare = 1;
if (b->flags & V4L2_BUF_FLAG_NO_CACHE_INVALIDATE) vb->need_cache_sync_on_finish = 0;
if (b->flags & V4L2_BUF_FLAG_NO_CACHE_CLEAN) vb->need_cache_sync_on_prepare = 0; }
| |