From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org, pawel@osciak.com,
s.nawrocki@samsung.com, m.szyprowski@samsung.com,
Hans Verkuil <hans.verkuil@cisco.com>
Subject: Re: [REVIEWv3 PATCH 06/17] vb2: call buf_finish from __queue_cancel.
Date: Mon, 03 Mar 2014 12:24:12 +0100 [thread overview]
Message-ID: <1906063.QvkTUhjlBo@avalon> (raw)
In-Reply-To: <1393609335-12081-7-git-send-email-hverkuil@xs4all.nl>
Hi Hans,
Thank you for the patch.
On Friday 28 February 2014 18:42:04 Hans Verkuil wrote:
> From: Hans Verkuil <hans.verkuil@cisco.com>
>
> If a queue was canceled, then the buf_finish op was never called for the
> pending buffers. So add this call to queue_cancel. Before calling buf_finish
> set the buffer state to PREPARED, which is the correct state. That way the
> states DONE and ERROR will only be seen in buf_finish if streaming is in
> progress.
>
> Since buf_finish can now be called from non-streaming state we need to
> adapt the handful of drivers that actually need to know this.
>
> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
> ---
> drivers/media/parport/bw-qcam.c | 3 +++
> drivers/media/pci/sta2x11/sta2x11_vip.c | 3 ++-
> drivers/media/usb/uvc/uvc_queue.c | 3 ++-
> drivers/media/v4l2-core/videobuf2-core.c | 14 ++++++++++++--
> include/media/videobuf2-core.h | 10 +++++++++-
> 5 files changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/media/parport/bw-qcam.c
> b/drivers/media/parport/bw-qcam.c index 0166aef..8d69bfb 100644
> --- a/drivers/media/parport/bw-qcam.c
> +++ b/drivers/media/parport/bw-qcam.c
> @@ -674,6 +674,9 @@ static void buffer_finish(struct vb2_buffer *vb)
> int size = vb->vb2_queue->plane_sizes[0];
> int len;
>
> + if (!vb2_is_streaming(vb->vb2_queue))
> + return;
> +
> mutex_lock(&qcam->lock);
> parport_claim_or_block(qcam->pdev);
>
> diff --git a/drivers/media/pci/sta2x11/sta2x11_vip.c
> b/drivers/media/pci/sta2x11/sta2x11_vip.c index e66556c..bb11443 100644
> --- a/drivers/media/pci/sta2x11/sta2x11_vip.c
> +++ b/drivers/media/pci/sta2x11/sta2x11_vip.c
> @@ -337,7 +337,8 @@ static void buffer_finish(struct vb2_buffer *vb)
> list_del_init(&vip_buf->list);
> spin_unlock(&vip->lock);
>
> - vip_active_buf_next(vip);
> + if (vb2_is_streaming(vb->vb2_queue))
> + vip_active_buf_next(vip);
> }
>
> static int start_streaming(struct vb2_queue *vq, unsigned int count)
> diff --git a/drivers/media/usb/uvc/uvc_queue.c
> b/drivers/media/usb/uvc/uvc_queue.c index cca2c6e..ab9f96e 100644
> --- a/drivers/media/usb/uvc/uvc_queue.c
> +++ b/drivers/media/usb/uvc/uvc_queue.c
> @@ -111,7 +111,8 @@ static void uvc_buffer_finish(struct vb2_buffer *vb)
> container_of(queue, struct uvc_streaming, queue);
> struct uvc_buffer *buf = container_of(vb, struct uvc_buffer, buf);
>
> - uvc_video_clock_update(stream, &vb->v4l2_buf, buf);
> + if (vb->state == VB2_BUF_STATE_DONE)
> + uvc_video_clock_update(stream, &vb->v4l2_buf, buf);
> }
>
> static void uvc_wait_prepare(struct vb2_queue *vq)
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c
> b/drivers/media/v4l2-core/videobuf2-core.c index 59bfd85..6f84bcb 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -1878,9 +1878,19 @@ static void __vb2_queue_cancel(struct vb2_queue *q)
>
> /*
> * Reinitialize all buffers for next use.
> + * Make sure to call buf_finish for any queued buffers. Normally
> + * that's done in dqbuf, but that's not going to happen when we
> + * cancel the whole queue.
I would also state that buf_finish can't simply be moved to __vb2_dqbuf as it
needs to be called before __fill_v4l2_buffer in the DQBUF path. Otherwise
someone might submit a patch to simplify that vb2 code later when we'll have
forgotten about this, introducing a bug.
> */
> - for (i = 0; i < q->num_buffers; ++i)
> - __vb2_dqbuf(q->bufs[i]);
> + for (i = 0; i < q->num_buffers; ++i) {
> + struct vb2_buffer *vb = q->bufs[i];
> +
> + if (vb->state != VB2_BUF_STATE_DEQUEUED) {
> + vb->state = VB2_BUF_STATE_PREPARED;
> + call_vb_qop(vb, buf_finish, vb);
> + }
> + __vb2_dqbuf(vb);
> + }
> }
>
> static int vb2_internal_streamon(struct vb2_queue *q, enum v4l2_buf_type
> type) diff --git a/include/media/videobuf2-core.h
> b/include/media/videobuf2-core.h index f443ce0..3cb0bcf 100644
> --- a/include/media/videobuf2-core.h
> +++ b/include/media/videobuf2-core.h
> @@ -276,7 +276,15 @@ struct vb2_buffer {
> * in driver; optional
> * @buf_finish: called before every dequeue of the buffer back to
> * userspace; drivers may perform any operations required
> - * before userspace accesses the buffer; optional
> + * before userspace accesses the buffer; optional. The
> + * buffer state can be one of the following: DONE and
> + * ERROR occur while streaming is in progress, and the
> + * PREPARED state occurs when the queue has been canceled
> + * and all pending buffers are being returned to their
> + * default DEQUEUED state. Typically you only have to do
> + * something if the state is VB2_BUF_STATE_DONE, since in
> + * all other cases the buffer contents will be ignored
> + * anyway.
> * @buf_cleanup: called once before the buffer is freed; drivers may
> * perform any additional cleanup; optional
> * @start_streaming: called once to enter 'streaming' state; the driver
may
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2014-03-03 11:22 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-28 17:41 [REVIEWv3 PATCH 00/17] vb2: fixes, balancing callbacks (PART 1) Hans Verkuil
2014-02-28 17:41 ` [REVIEWv3 PATCH 01/17] vb2: Check if there are buffers before streamon Hans Verkuil
2014-03-03 4:19 ` Pawel Osciak
2014-02-28 17:42 ` [REVIEWv3 PATCH 02/17] vb2: fix read/write regression Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 03/17] vb2: fix PREPARE_BUF regression Hans Verkuil
2014-03-03 4:21 ` Pawel Osciak
2014-02-28 17:42 ` [REVIEWv3 PATCH 04/17] vb2: add debugging code to check for unbalanced ops Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 05/17] vb2: change result code of buf_finish to void Hans Verkuil
2014-03-03 11:14 ` Laurent Pinchart
2014-02-28 17:42 ` [REVIEWv3 PATCH 06/17] vb2: call buf_finish from __queue_cancel Hans Verkuil
2014-03-03 6:28 ` Sakari Ailus
2014-03-03 7:19 ` Sakari Ailus
2014-03-03 11:24 ` Laurent Pinchart [this message]
2014-02-28 17:42 ` [REVIEWv3 PATCH 07/17] vb2: consistent usage of periods in videobuf2-core.h Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 08/17] vb2: fix buf_init/buf_cleanup call sequences Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 09/17] vb2: rename queued_count to owned_by_drv_count Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 10/17] vb2: don't init the list if there are still buffers Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 11/17] vb2: only call start_streaming if sufficient buffers are queued Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 12/17] vb2: properly clean up PREPARED and QUEUED buffers Hans Verkuil
2014-03-03 7:12 ` Sakari Ailus
2014-02-28 17:42 ` [REVIEWv3 PATCH 13/17] vb2: replace BUG by WARN_ON Hans Verkuil
2014-03-03 7:19 ` Sakari Ailus
2014-02-28 17:42 ` [REVIEWv3 PATCH 14/17] vb2: fix streamoff handling if streamon wasn't called Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 15/17] vb2: call buf_finish after the state check Hans Verkuil
2014-03-03 7:21 ` Sakari Ailus
2014-02-28 17:42 ` [REVIEWv3 PATCH 16/17] vivi: correctly cleanup after a start_streaming failure Hans Verkuil
2014-02-28 17:42 ` [REVIEWv3 PATCH 17/17] vivi: fix ENUM_FRAMEINTERVALS implementation Hans Verkuil
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1906063.QvkTUhjlBo@avalon \
--to=laurent.pinchart@ideasonboard.com \
--cc=hans.verkuil@cisco.com \
--cc=hverkuil@xs4all.nl \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=pawel@osciak.com \
--cc=s.nawrocki@samsung.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.