All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hans Verkuil <hverkuil@xs4all.nl>
To: Sergey Senozhatsky <senozhatsky@chromium.org>
Cc: Hans Verkuil <hans.verkuil@cisco.com>,
	Tomasz Figa <tfiga@chromium.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Sakari Ailus <sakari.ailus@iki.fi>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Pawel Osciak <posciak@chromium.org>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC][PATCH 04/15] videobuf2: add queue memory consistency parameter
Date: Thu, 23 Jan 2020 12:02:50 +0100	[thread overview]
Message-ID: <8d61a2b6-4540-2dd1-309c-93d4cfa8cbcd@xs4all.nl> (raw)
In-Reply-To: <20200122020555.GD149602@google.com>

On 1/22/20 3:05 AM, Sergey Senozhatsky wrote:
> On (20/01/10 10:47), Hans Verkuil wrote:
>> On 12/17/19 4:20 AM, Sergey Senozhatsky wrote:
>>> Preparations for future V4L2_FLAG_MEMORY_NON_CONSISTENT support.
>>>
>>> Extend vb2_core_reqbufs() with queue memory consistency flag.
>>> API permits queue's consistency attribute adjustment only if
>>> the queue has no allocated buffers, not busy, and does not have
>>> buffers waiting to be de-queued.
>>
>> Actually, you can call vb2_core_reqbufs() when buffers are allocated:
>> it will free the old buffers, then allocate the new ones.
>> So drop the 'has no allocated buffers' bit.
> 
> Well, the wording, basically, follows the existing vb2_core_reqbufs()
> behavior "queue memory type"-wise. What I'm trying to say:

How about this commit log replacement of the first paragraph:

"Extend vb2_core_reqbufs() with queue memory consistency flag that is
applied to the newly allocated buffers."

The bits about 'only if the queue has no allocated buffers, not busy, and does
not have buffers waiting to be de-queued.' is really irrelevant and confusing
(at least to me!).

Regards,

	Hans

> 
> [..]
> int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory,
> 		bool consistent_mem, unsigned int *count)
> {
> 	unsigned int num_buffers, allocated_buffers, num_planes = 0;
> 	unsigned plane_sizes[VB2_MAX_PLANES] = { };
> 	unsigned int i;
> 	int ret;
> 
> 	if (q->streaming) {
> 		dprintk(1, "streaming active\n");
> 		return -EBUSY;
> 	}
> 
> 	if (q->waiting_in_dqbuf && *count) {
> 		dprintk(1, "another dup()ped fd is waiting for a buffer\n");
> 		return -EBUSY;
> 	}
> 
> 	if (*count == 0 || q->num_buffers != 0 ||
> 	    (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory)) {
> 		/*
> 		 * We already have buffers allocated, so first check if they
> 		 * are not in use and can be freed.
> 		 */
> 		mutex_lock(&q->mmap_lock);
> 		if (debug && q->memory == VB2_MEMORY_MMAP &&
> 		    __buffers_in_use(q))
> 			dprintk(1, "memory in use, orphaning buffers\n");
> 
> 		/*
> 		 * Call queue_cancel to clean up any buffers in the
> 		 * QUEUED state which is possible if buffers were prepared or
> 		 * queued without ever calling STREAMON.
> 		 */
> 		__vb2_queue_cancel(q);
> 		ret = __vb2_queue_free(q, q->num_buffers);
> 		mutex_unlock(&q->mmap_lock);
> 		if (ret)
> 			return ret;
> 
> 		/*
> 		 * In case of REQBUFS(0) return immediately without calling
> 		 * driver's queue_setup() callback and allocating resources.
> 		 */
> 		if (*count == 0)
> 			return 0;
> 	}
> 
> 	/*
> 	 * Make sure the requested values and current defaults are sane.
> 	 */
> 	WARN_ON(q->min_buffers_needed > VB2_MAX_FRAME);
> 	num_buffers = max_t(unsigned int, *count, q->min_buffers_needed);
> 	num_buffers = min_t(unsigned int, num_buffers, VB2_MAX_FRAME);
> 	memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
> 	q->memory = memory;
> +	__set_queue_consistency(q, consistent_mem);
> 
> [..]
> 
> So we set/change queue consistency attribute when we set/change
> queue memory type. Is there a use case for more flexibility when
> it comes to queue consistency?
> 
>>> If user-space attempts to allocate a buffer with consistency
>>> requirements which don't match queue's consistency model such
>>> allocation requests will be failed.
>>
>> Is this last paragraph right? I don't see any code for that.
> 
> Yeah, this was more about the general direction. The actual code
> was added later in the series.
> 
>> BTW, a general comment about patches 4-6: I prefer if you changes
>> this to two patches: one that adds videobuf2-core.c support for
>> this for reqbufs and create_bufs, then another that wires up the
>> new V4L2 flag in videobuf2-v4l2.c.
> 
> I'll take a look.
> 
> 	-ss
> 


  reply	other threads:[~2020-01-23 11:02 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-17  3:20 [RFC][PATCH 00/15] Implement V4L2_BUF_FLAG_NO_CACHE_* flags Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 01/15] videobuf2: add cache management members Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 02/15] videobuf2: handle V4L2 buffer cache flags Sergey Senozhatsky
2020-01-10 10:24   ` Hans Verkuil
2020-01-22  1:39     ` Sergey Senozhatsky
2020-01-22  2:53       ` Sergey Senozhatsky
2020-01-28  4:35         ` Tomasz Figa
2019-12-17  3:20 ` [RFC][PATCH 03/15] videobuf2: add V4L2_FLAG_MEMORY_NON_CONSISTENT flag Sergey Senozhatsky
2020-01-10  9:36   ` Hans Verkuil
2020-01-10  9:46     ` Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 04/15] videobuf2: add queue memory consistency parameter Sergey Senozhatsky
2020-01-10  9:47   ` Hans Verkuil
2020-01-22  2:05     ` Sergey Senozhatsky
2020-01-23 11:02       ` Hans Verkuil [this message]
2020-01-24  2:04         ` Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 05/15] videobuf2: handle V4L2_FLAG_MEMORY_NON_CONSISTENT in REQBUFS Sergey Senozhatsky
2020-01-10  9:55   ` Hans Verkuil
2020-01-22  2:18     ` Sergey Senozhatsky
2020-01-22  3:48       ` Sergey Senozhatsky
2020-01-23 11:08         ` Hans Verkuil
2020-01-28  4:45           ` Tomasz Figa
2020-01-28  8:38             ` Hans Verkuil
2019-12-17  3:20 ` [RFC][PATCH 06/15] videobuf2: handle V4L2_FLAG_MEMORY_NON_CONSISTENT in CREATE_BUFS Sergey Senozhatsky
2020-01-10  9:59   ` Hans Verkuil
2020-01-23  3:41     ` Sergey Senozhatsky
2020-01-23 11:41       ` Hans Verkuil
2020-01-24  1:28         ` Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 07/15] videobuf2: factor out planes prepare/finish functions Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 08/15] videobuf2: do not sync caches when we are allowed not to Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 09/15] videobuf2: check ->synced flag in prepare() and finish() Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 10/15] videobuf2: let user-space know when driver supports cache hints Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 11/15] videobuf2: add begin/end cpu_access callbacks to dma-contig Sergey Senozhatsky
2019-12-17  3:20 ` [RFC][PATCH 12/15] videobuf2: add begin/end cpu_access callbacks to dma-sg Sergey Senozhatsky
2020-01-10 10:13   ` Hans Verkuil
2020-01-22  6:37     ` Sergey Senozhatsky
2020-01-28  4:38     ` Tomasz Figa
2020-01-28  8:36       ` Hans Verkuil
2020-01-30 11:02         ` Tomasz Figa
2020-01-30 12:18           ` Hans Verkuil
2020-02-03 10:04             ` Tomasz Figa
2020-02-04  2:50               ` Sergey Senozhatsky
2020-02-06  8:51                 ` Tomasz Figa
2019-12-17  3:20 ` [RFC][PATCH 13/15] videobuf2: do not sync buffers for DMABUF queues Sergey Senozhatsky
2020-01-10 10:30   ` Hans Verkuil
2020-01-22  5:05     ` Sergey Senozhatsky
2020-01-23 11:35       ` Hans Verkuil
2020-01-24  2:25         ` Sergey Senozhatsky
2020-01-24  7:32           ` Sergey Senozhatsky
2020-01-28  7:22             ` Tomasz Figa
2020-01-28  7:34               ` Sergey Senozhatsky
2020-01-28  7:19         ` Tomasz Figa
2020-01-28  8:47           ` Hans Verkuil
2019-12-17  3:20 ` [RFC][PATCH 14/15] videobuf2: don't test db_attach in dma-contig prepare and finish Sergey Senozhatsky
2020-01-10 10:32   ` Hans Verkuil
2019-12-17  3:20 ` [RFC][PATCH 15/15] videobuf2: don't test db_attach in dma-sg " Sergey Senozhatsky
2020-01-08  2:27 ` [RFC][PATCH 00/15] Implement V4L2_BUF_FLAG_NO_CACHE_* flags Sergey Senozhatsky

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=8d61a2b6-4540-2dd1-309c-93d4cfa8cbcd@xs4all.nl \
    --to=hverkuil@xs4all.nl \
    --cc=hans.verkuil@cisco.com \
    --cc=kyungmin.park@samsung.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@kernel.org \
    --cc=posciak@chromium.org \
    --cc=sakari.ailus@iki.fi \
    --cc=senozhatsky@chromium.org \
    --cc=tfiga@chromium.org \
    /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.