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 <senozhatsky@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
(cherry picked from commit dcf3bfe7c7)

Conflicts:
	drivers/media/common/videobuf2/videobuf2-core.c

Change-Id: I9cb129fa00f5355fbcda552a3c08052c7c324743
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
This commit is contained in:
Sergey Senozhatsky
2020-05-14 18:01:47 +02:00
committed by Tao Huang
parent 00d81d9d97
commit 59a5bae71b

View File

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