public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Gustavo Padovan <gustavo@padovan.org>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: linux-media@vger.kernel.org,
	Javier Martinez Canillas <javier@osg.samsung.com>,
	Mauro Carvalho Chehab <mchehab@osg.samsung.com>,
	Shuah Khan <shuahkh@osg.samsung.com>,
	Gustavo Padovan <gustavo.padovan@collabora.com>
Subject: Re: [PATCH 03/12] [media] vb2: add in-fence support to QBUF
Date: Mon, 10 Jul 2017 17:26:56 -0300	[thread overview]
Message-ID: <20170710202656.GM10284@jade> (raw)
In-Reply-To: <20170710190244.GF10284@jade>

2017-07-10 Gustavo Padovan <gustavo@padovan.org>:

> 2017-07-07 Hans Verkuil <hverkuil@xs4all.nl>:
> 
> > On 07/07/2017 04:00 AM, Gustavo Padovan wrote:
> > > 2017-07-06 Hans Verkuil <hverkuil@xs4all.nl>:
> > > 
> > > > On 06/16/17 09:39, Gustavo Padovan wrote:
> > > > > From: Gustavo Padovan <gustavo.padovan@collabora.com>
> > > > > 
> > > > > Receive in-fence from userspace and add support for waiting on them
> > > > > before queueing the buffer to the driver. Buffers are only queued
> > > > > to the driver once they are ready. A buffer is ready when its
> > > > > in-fence signals.
> > > > > 
> > > > > v2:
> > > > > 	- fix vb2_queue_or_prepare_buf() ret check
> > > > > 	- remove check for VB2_MEMORY_DMABUF only (Javier)
> > > > > 	- check num of ready buffers to start streaming
> > > > > 	- when queueing, start from the first ready buffer
> > > > > 	- handle queue cancel
> > > > > 
> > > > > Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.com>
> > > > > ---
> > > > >   drivers/media/Kconfig                    |  1 +
> > > > >   drivers/media/v4l2-core/videobuf2-core.c | 97 +++++++++++++++++++++++++-------
> > > > >   drivers/media/v4l2-core/videobuf2-v4l2.c | 15 ++++-
> > > > >   include/media/videobuf2-core.h           |  7 ++-
> > > > >   4 files changed, 99 insertions(+), 21 deletions(-)
> > > > > 
> > > > 
> > > > <snip>
> > > > 
> > > > > diff --git a/drivers/media/v4l2-core/videobuf2-v4l2.c b/drivers/media/v4l2-core/videobuf2-v4l2.c
> > > > > index 110fb45..e6ad77f 100644
> > > > > --- a/drivers/media/v4l2-core/videobuf2-v4l2.c
> > > > > +++ b/drivers/media/v4l2-core/videobuf2-v4l2.c
> > > > > @@ -23,6 +23,7 @@
> > > > >   #include <linux/sched.h>
> > > > >   #include <linux/freezer.h>
> > > > >   #include <linux/kthread.h>
> > > > > +#include <linux/sync_file.h>
> > > > >   #include <media/v4l2-dev.h>
> > > > >   #include <media/v4l2-fh.h>
> > > > > @@ -560,6 +561,7 @@ EXPORT_SYMBOL_GPL(vb2_create_bufs);
> > > > >   int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b)
> > > > >   {
> > > > > +	struct dma_fence *fence = NULL;
> > > > >   	int ret;
> > > > >   	if (vb2_fileio_is_active(q)) {
> > > > > @@ -568,7 +570,18 @@ int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b)
> > > > >   	}
> > > > >   	ret = vb2_queue_or_prepare_buf(q, b, "qbuf");
> > > > > -	return ret ? ret : vb2_core_qbuf(q, b->index, b);
> > > > > +	if (ret)
> > > > > +		return ret;
> > > > > +
> > > > > +	if (b->flags & V4L2_BUF_FLAG_IN_FENCE) {
> > > > > +		fence = sync_file_get_fence(b->fence_fd);
> > > > > +		if (!fence) {
> > > > > +			dprintk(1, "failed to get in-fence from fd\n");
> > > > > +			return -EINVAL;
> > > > > +		}
> > > > > +	}
> > > > > +
> > > > > +	return ret ? ret : vb2_core_qbuf(q, b->index, b, fence);
> > > > >   }
> > > > >   EXPORT_SYMBOL_GPL(vb2_qbuf);
> > > > 
> > > > You need to adapt __fill_v4l2_buffer so it sets the IN_FENCE buffer flag
> > > > if there is a fence pending. It should also fill in fence_fd.
> > > 
> > > It was userspace who sent the fence_fd in the first place. Why do we
> > > need to send it back? The initial plan was - from a userspace point of view
> > > - to send the in-fence in the fence_fd field and receive the out-fence
> > >   in the same field.
> > > 
> > > As per setting the IN_FENCE flag, that is racy, as the fence can signal
> > > just after we called __fill_v4l2_buffer. Why is it important to set it?
> > 
> > Because when running VIDIOC_QUERYBUF it should return the current state of
> > the buffer, including whether it has a fence. You can do something like
> > v4l2-ctl --list-buffers to see how many buffers are queued up and the state
> > of each buffer. Can be useful to e.g. figure out why a video capture seems
> > to stall. Knowing that all queued buffers are all waiting for a fence is
> > very useful information. Whether the fence_fd should also be set here or
> > only in dqbuf is something I don't know (not enough knowledge about how
> > fences are supposed to work). The IN/OUT_FENCE flags should definitely be
> > reported though.
> 
> I didn't know about this usecase. Thanks for explaining. It certainly
> makes sense to set the IN/OUT_FENCE flags here. Regarding the fence_fd
> I would expect the application to know the fence fd associated to than
> buffer. If we expect an application other than the one which issued
> QBUF than I'd say we also need to provide the fd on VIDIOC_QUERYBUF
> for inspection purposes. Is that the case?

I just realized that if we want to also set the in-fence fd here we
actually need to get a new unused fd, as either it is a different pid or
the app already closed the fd it was using previously. Given this extra
complication I'd say we shouldn't set fence fd unless someone has an
usecase in mind.

	Gustavo

  reply	other threads:[~2017-07-10 20:27 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-16  7:39 [PATCH 00/12] V4L2 explicit synchronization support Gustavo Padovan
2017-06-16  7:39 ` [PATCH 01/12] [media] vb2: add explicit fence user API Gustavo Padovan
2017-06-18 14:09   ` kbuild test robot
2017-06-18 14:58   ` kbuild test robot
2017-06-26 15:39     ` Gustavo Padovan
2017-07-04  5:57       ` Tomasz Figa
2017-07-04  6:27         ` Alexandre Courbot
2017-06-30 11:12   ` Mauro Carvalho Chehab
2017-06-16  7:39 ` [PATCH 02/12] [media] vb2: split out queueing from vb_core_qbuf() Gustavo Padovan
2017-06-30 11:15   ` Mauro Carvalho Chehab
2017-07-06  7:46   ` Hans Verkuil
2017-07-07  1:04     ` Gustavo Padovan
2017-06-16  7:39 ` [PATCH 03/12] [media] vb2: add in-fence support to QBUF Gustavo Padovan
2017-06-18 15:36   ` kbuild test robot
2017-06-30 11:53   ` Mauro Carvalho Chehab
2017-07-03 18:16     ` Gustavo Padovan
2017-07-06  9:43       ` Hans Verkuil
2017-07-07  1:12         ` Gustavo Padovan
2017-07-06  8:29   ` Hans Verkuil
2017-07-07  1:53     ` Gustavo Padovan
2017-07-07  7:15       ` Hans Verkuil
2017-07-10 19:27         ` Gustavo Padovan
2017-07-06  9:18   ` Hans Verkuil
2017-07-07  2:00     ` Gustavo Padovan
2017-07-07  7:06       ` Hans Verkuil
2017-07-10 19:02         ` Gustavo Padovan
2017-07-10 20:26           ` Gustavo Padovan [this message]
2017-07-11  5:57             ` Hans Verkuil
2017-07-11 12:56               ` Gustavo Padovan
2017-06-16  7:39 ` [PATCH 04/12] [media] uvc: enable subscriptions to other events Gustavo Padovan
2017-07-07 14:38   ` Shuah Khan
2017-07-10 19:38     ` Gustavo Padovan
2017-07-26  0:26       ` Gustavo Padovan
2017-06-16  7:39 ` [PATCH 05/12] [media] vivid: assign the specific device to the vb2_queue->dev Gustavo Padovan
2017-07-06  8:36   ` Hans Verkuil
2017-07-07 17:15   ` Shuah Khan
2017-07-10 19:42     ` Gustavo Padovan
2017-07-26  0:17     ` Gustavo Padovan
2017-06-16  7:39 ` [PATCH 06/12] [media] v4l: add V4L2_EVENT_BUF_QUEUED event Gustavo Padovan
2017-06-30 12:00   ` Mauro Carvalho Chehab
2017-06-16  7:39 ` [PATCH 07/12] [media] v4l: add support to BUF_QUEUED event Gustavo Padovan
2017-06-30 12:04   ` Mauro Carvalho Chehab
2017-07-03 18:36     ` Gustavo Padovan
2017-07-06  9:34     ` Hans Verkuil
2017-07-10 19:45       ` Gustavo Padovan
2017-07-06  8:47   ` Hans Verkuil
2017-06-16  7:39 ` [PATCH 08/12] [media] vb2: add 'ordered' property to queues Gustavo Padovan
2017-06-16 16:56   ` Nicolas Dufresne
2017-06-26 15:22     ` Gustavo Padovan
2017-07-06  9:08   ` Hans Verkuil
2017-06-16  7:39 ` [PATCH 09/12] [media] vivid: mark vivid queues as ordered Gustavo Padovan
2017-07-06  8:37   ` Hans Verkuil
2017-07-07 17:31   ` Shuah Khan
2017-07-10 19:47     ` Gustavo Padovan
2017-06-16  7:39 ` [PATCH 10/12] [media] vb2: add videobuf2 dma-buf fence helpers Gustavo Padovan
2017-06-16  7:39 ` [PATCH 11/12] [media] vb2: add infrastructure to support out-fences Gustavo Padovan
2017-06-16  7:39 ` [PATCH 12/12] [media] vb2: add out-fence support to QBUF Gustavo Padovan
2017-07-06  9:27   ` Hans Verkuil
2017-07-06  9:29   ` Hans Verkuil
2017-07-10 20:19     ` Gustavo Padovan
2017-06-30 12:18 ` [PATCH 00/12] V4L2 explicit synchronization support Mauro Carvalho Chehab
2017-07-03 18:40   ` Gustavo Padovan

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=20170710202656.GM10284@jade \
    --to=gustavo@padovan.org \
    --cc=gustavo.padovan@collabora.com \
    --cc=hverkuil@xs4all.nl \
    --cc=javier@osg.samsung.com \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@osg.samsung.com \
    --cc=shuahkh@osg.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox