From: Hans Verkuil <hverkuil@xs4all.nl>
To: Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
linux-media@vger.kernel.org
Cc: Pawel Osciak <pawel@osciak.com>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Kyungmin Park <kyungmin.park@samsung.com>
Subject: Re: [RFC/PATCH] v4l: vb2: Add a function to discard all DONE buffers
Date: Mon, 10 Mar 2014 14:11:07 +0100 [thread overview]
Message-ID: <531DB9EB.1000505@xs4all.nl> (raw)
In-Reply-To: <1394456681-8948-1-git-send-email-laurent.pinchart@ideasonboard.com>
On 03/10/2014 02:04 PM, Laurent Pinchart wrote:
> When suspending a device while a video stream is active all buffers
> marked as done but not dequeued yet will be kept across suspend and
> given back to userspace after resume. This will result in outdated
> buffers being dequeued.
>
> Introduce a new vb2 function to mark all done buffers as erroneous
> instead, to be used by drivers at resume time.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Makes sense.
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Regards,
Hans
> ---
> drivers/media/v4l2-core/videobuf2-core.c | 24 ++++++++++++++++++++++++
> include/media/videobuf2-core.h | 1 +
> 2 files changed, 25 insertions(+)
>
> The OMAP3 ISP driver custom queue implementation has this feature. I'm trying
> to move it to videobuf2, and thus need something similar in vb2. The function
> name could probably be improved, I'm open to suggestions.
>
> diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c
> index 8e6695c..ae2b5b1 100644
> --- a/drivers/media/v4l2-core/videobuf2-core.c
> +++ b/drivers/media/v4l2-core/videobuf2-core.c
> @@ -971,6 +971,30 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)
> EXPORT_SYMBOL_GPL(vb2_buffer_done);
>
> /**
> + * vb2_discard_done() - discard all buffers marked as DONE
> + * @q: videobuf2 queue
> + *
> + * This function is intended to be used with suspend/resume operations. It
> + * discards all 'done' buffers as they would be too old to be requested after
> + * resume.
> + *
> + * Drivers must stop the hardware and synchronize with interrupt handlers and/or
> + * delayed works before calling this function to make sure no buffer will be
> + * touched by the driver and/or hardware.
> + */
> +void vb2_discard_done(struct vb2_queue *q)
> +{
> + struct vb2_buffer *vb;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&q->done_lock, flags);
> + list_for_each_entry(vb, &q->done_list, done_entry)
> + vb->state = VB2_BUF_STATE_ERROR;
> + spin_unlock_irqrestore(&q->done_lock, flags);
> +}
> +EXPORT_SYMBOL_GPL(vb2_discard_done);
> +
> +/**
> * __fill_vb2_buffer() - fill a vb2_buffer with information provided in a
> * v4l2_buffer by the userspace. The caller has already verified that struct
> * v4l2_buffer has a valid number of planes.
> diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
> index bf6859e..213b555 100644
> --- a/include/media/videobuf2-core.h
> +++ b/include/media/videobuf2-core.h
> @@ -372,6 +372,7 @@ void *vb2_plane_vaddr(struct vb2_buffer *vb, unsigned int plane_no);
> void *vb2_plane_cookie(struct vb2_buffer *vb, unsigned int plane_no);
>
> void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state);
> +void vb2_discard_done(struct vb2_queue *q);
> int vb2_wait_for_all_buffers(struct vb2_queue *q);
>
> int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b);
>
prev parent reply other threads:[~2014-03-10 13:11 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-10 13:04 [RFC/PATCH] v4l: vb2: Add a function to discard all DONE buffers Laurent Pinchart
2014-03-10 13:11 ` Hans Verkuil [this message]
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=531DB9EB.1000505@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=kyungmin.park@samsung.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=pawel@osciak.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.