From 59a5bae71b6dbe5c4dc9050547280584ab43fa0e Mon Sep 17 00:00:00 2001 From: Sergey Senozhatsky Date: Thu, 14 May 2020 18:01:47 +0200 Subject: [PATCH] BACKPORT: media: videobuf2: do not sync caches when we are allowed not to Skip ->prepare() or/and ->finish() cache synchronisation if user-space requested us to do so (or when queue dma direction permits us to skip cache syncs). Signed-off-by: Sergey Senozhatsky Signed-off-by: Hans Verkuil Signed-off-by: Mauro Carvalho Chehab (cherry picked from commit dcf3bfe7c71d8da57cda2e3e06b8c28ed155741b) Conflicts: drivers/media/common/videobuf2/videobuf2-core.c Change-Id: I9cb129fa00f5355fbcda552a3c08052c7c324743 Signed-off-by: Jeffy Chen --- .../media/common/videobuf2/videobuf2-core.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c index 93d250db0b6f..22fa71948114 100644 --- a/drivers/media/common/videobuf2/videobuf2-core.c +++ b/drivers/media/common/videobuf2/videobuf2-core.c @@ -932,9 +932,9 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) dprintk(4, "done processing on buffer %d, state: %d\n", vb->index, state); - if (state != VB2_BUF_STATE_QUEUED && - state != VB2_BUF_STATE_REQUEUEING) { - /* sync buffers */ + if ((state != VB2_BUF_STATE_QUEUED && + state != VB2_BUF_STATE_REQUEUEING) && + vb->need_cache_sync_on_finish) { for (plane = 0; plane < vb->num_planes; ++plane) call_void_memop(vb, finish, vb->planes[plane].mem_priv); } @@ -1291,9 +1291,11 @@ static int __buf_prepare(struct vb2_buffer *vb, const void *pb) return ret; } - /* sync buffers */ - for (plane = 0; plane < vb->num_planes; ++plane) - call_void_memop(vb, prepare, vb->planes[plane].mem_priv); + if (vb->need_cache_sync_on_prepare) { + for (plane = 0; plane < vb->num_planes; ++plane) + call_void_memop(vb, prepare, + vb->planes[plane].mem_priv); + } vb->state = VB2_BUF_STATE_PREPARED; @@ -1727,8 +1729,9 @@ static void __vb2_queue_cancel(struct vb2_queue *q) for (i = 0; i < q->num_buffers; ++i) { struct vb2_buffer *vb = q->bufs[i]; - if (vb->state == VB2_BUF_STATE_PREPARED || - vb->state == VB2_BUF_STATE_QUEUED) { + if ((vb->state == VB2_BUF_STATE_PREPARED || + vb->state == VB2_BUF_STATE_QUEUED) && + vb->need_cache_sync_on_finish) { unsigned int plane; for (plane = 0; plane < vb->num_planes; ++plane)