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.ai...@linux.intel.com> 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: sta...@vger.kernel.org # for v4.13 and up
> Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> ---
> 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

Reply via email to