Hello Sakari, Thanks for proposing this patch. I'll give it a try this weekend. Regards, Devin On Fri, Feb 2, 2018 at 5:08 AM, Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> wrote: > If buffers were prepared or queued and the buffers were released without > starting the queue, the finish mem op (corresponding to the prepare mem > op) was never called to the buffers. > > Before commit a136f59c0a1f there was no need to do this as in such a case > the prepare mem op had not been called yet. Address the problem by > explicitly calling finish mem op when the queue is stopped if the buffer > is in either prepared or queued state. > > Fixes: a136f59c0a1f ("[media] vb2: Move buffer cache synchronisation to prepare from queue") > Cc: stable@xxxxxxxxxxxxxxx # for v4.13 and up > Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > --- > Hi Devin, > > Could you check whether this will resolve the problem you've found? > > Thanks. > > drivers/media/common/videobuf2/videobuf2-core.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c > index f7109f827f6e..52a7c1d0a79a 100644 > --- a/drivers/media/common/videobuf2/videobuf2-core.c > +++ b/drivers/media/common/videobuf2/videobuf2-core.c > @@ -1696,6 +1696,15 @@ 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) { > + unsigned int plane; > + > + for (plane = 0; plane < vb->num_planes; ++plane) > + call_void_memop(vb, finish, > + vb->planes[plane].mem_priv); > + } > + > if (vb->state != VB2_BUF_STATE_DEQUEUED) { > vb->state = VB2_BUF_STATE_PREPARED; > call_void_vb_qop(vb, buf_finish, vb); > -- > 2.11.0 > -- Devin J. Heitmueller - Kernel Labs http://www.kernellabs.com