From: Tomasz Figa <tfiga@chromium.org>
To: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Cc: mchehab@kernel.org, m.szyprowski@samsung.com, ming.qian@nxp.com,
ezequiel@vanguardiasur.com.ar, p.zabel@pengutronix.de,
gregkh@linuxfoundation.org, hverkuil-cisco@xs4all.nl,
nicolas.dufresne@collabora.com, linux-media@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-mediatek@lists.infradead.org,
linux-arm-msm@vger.kernel.org,
linux-rockchip@lists.infradead.org,
linux-staging@lists.linux.dev, kernel@collabora.com
Subject: Re: [PATCH v14 08/56] media: videobuf2: Use vb2_get_num_buffers() helper
Date: Wed, 8 Nov 2023 09:42:23 +0000 [thread overview]
Message-ID: <20231108094223.rprskkeee47vaezy@chromium.org> (raw)
In-Reply-To: <20231031163104.112469-9-benjamin.gaignard@collabora.com>
On Tue, Oct 31, 2023 at 05:30:16PM +0100, Benjamin Gaignard wrote:
> Stop using queue num_buffers field directly, instead use
> vb2_get_num_buffers().
> This prepares for the future 'delete buffers' feature where there are
> holes in the buffer indices.
>
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
> .../media/common/videobuf2/videobuf2-core.c | 92 +++++++++++--------
> .../media/common/videobuf2/videobuf2-v4l2.c | 4 +-
> 2 files changed, 54 insertions(+), 42 deletions(-)
>
> diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
> index b406a30a9b35..c5c5ae4d213d 100644
> --- a/drivers/media/common/videobuf2/videobuf2-core.c
> +++ b/drivers/media/common/videobuf2/videobuf2-core.c
> @@ -444,13 +444,14 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory,
> unsigned int num_buffers, unsigned int num_planes,
> const unsigned plane_sizes[VB2_MAX_PLANES])
> {
> + unsigned int q_num_buffers = vb2_get_num_buffers(q);
> unsigned int buffer, plane;
> struct vb2_buffer *vb;
> int ret;
>
> /* Ensure that q->num_buffers+num_buffers is below VB2_MAX_FRAME */
> num_buffers = min_t(unsigned int, num_buffers,
> - VB2_MAX_FRAME - q->num_buffers);
> + VB2_MAX_FRAME - q_num_buffers);
I guess it's safe in this specific situation, but was there any reason
behind not just calling vb2_get_num_buffers() directly here?
>
> for (buffer = 0; buffer < num_buffers; ++buffer) {
> /* Allocate vb2 buffer structures */
> @@ -470,7 +471,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory,
> vb->planes[plane].min_length = plane_sizes[plane];
> }
>
> - vb2_queue_add_buffer(q, vb, q->num_buffers + buffer);
> + vb2_queue_add_buffer(q, vb, q_num_buffers + buffer);
In this case it should also be fine, but actually now this is a loop and if
somone doesn't know what the other code in the loop does, one could be
concerned that the num buffers actually could have changed, but we still
use the cached one that we got at the beginning of the function.
(Ideally I'd imagine vb2_queue_add_buffer() to append the buffer
at the end of the queue and increment the num_buffers internally, but it
doesn't have to happen now, as this series is already quite complex...)
> call_void_bufop(q, init_buffer, vb);
>
> /* Allocate video buffer memory for the MMAP type */
[snip]
> @@ -2513,7 +2519,8 @@ void vb2_core_queue_release(struct vb2_queue *q)
> __vb2_cleanup_fileio(q);
> __vb2_queue_cancel(q);
> mutex_lock(&q->mmap_lock);
> - __vb2_queue_free(q, q->num_buffers);
> + __vb2_queue_free(q, vb2_get_num_buffers(q));
> + q->num_buffers = 0;
Unrelated change?
> mutex_unlock(&q->mmap_lock);
> }
> EXPORT_SYMBOL_GPL(vb2_core_queue_release);
> @@ -2542,7 +2549,7 @@ __poll_t vb2_core_poll(struct vb2_queue *q, struct file *file,
> /*
> * Start file I/O emulator only if streaming API has not been used yet.
> */
> - if (q->num_buffers == 0 && !vb2_fileio_is_active(q)) {
> + if (vb2_get_num_buffers(q) == 0 && !vb2_fileio_is_active(q)) {
> if (!q->is_output && (q->io_modes & VB2_READ) &&
> (req_events & (EPOLLIN | EPOLLRDNORM))) {
> if (__vb2_init_fileio(q, 1))
> @@ -2580,7 +2587,7 @@ __poll_t vb2_core_poll(struct vb2_queue *q, struct file *file,
> * For output streams you can call write() as long as there are fewer
> * buffers queued than there are buffers available.
> */
> - if (q->is_output && q->fileio && q->queued_count < q->num_buffers)
> + if (q->is_output && q->fileio && q->queued_count < vb2_get_num_buffers(q))
> return EPOLLOUT | EPOLLWRNORM;
>
> if (list_empty(&q->done_list)) {
> @@ -2629,8 +2636,8 @@ struct vb2_fileio_buf {
> * struct vb2_fileio_data - queue context used by file io emulator
> *
> * @cur_index: the index of the buffer currently being read from or
> - * written to. If equal to q->num_buffers then a new buffer
> - * must be dequeued.
> + * written to. If equal to number of already queued buffers
> + * then a new buffer must be dequeued.
Hmm, that's a significant meaning change compared to the original text. Is
it indended?
> * @initial_index: in the read() case all buffers are queued up immediately
> * in __vb2_init_fileio() and __vb2_perform_fileio() just cycles
> * buffers. However, in the write() case no buffers are initially
> @@ -2640,7 +2647,7 @@ struct vb2_fileio_buf {
> * buffers. This means that initially __vb2_perform_fileio()
> * needs to know what buffer index to use when it is queuing up
> * the buffers for the first time. That initial index is stored
> - * in this field. Once it is equal to q->num_buffers all
> + * in this field. Once it is equal to num_buffers all
It's not clear what num_buffers means here. Would it make sense to instead
say "number of buffers in the vb2_queue"?
> * available buffers have been queued and __vb2_perform_fileio()
> * should start the normal dequeue/queue cycle.
> *
> @@ -2690,7 +2697,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
> /*
> * Check if streaming api has not been already activated.
> */
> - if (q->streaming || q->num_buffers > 0)
> + if (q->streaming || vb2_get_num_buffers(q) > 0)
> return -EBUSY;
>
> /*
> @@ -2740,7 +2747,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
> /*
> * Get kernel address of each buffer.
> */
> - for (i = 0; i < q->num_buffers; i++) {
> + for (i = 0; i < vb2_get_num_buffers(q); i++) {
> /* vb can never be NULL when using fileio. */
> vb = vb2_get_buffer(q, i);
>
> @@ -2759,18 +2766,23 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
> /*
> * Queue all buffers.
> */
> - for (i = 0; i < q->num_buffers; i++) {
> - ret = vb2_core_qbuf(q, q->bufs[i], NULL, NULL);
> + for (i = 0; i < vb2_get_num_buffers(q); i++) {
> + struct vb2_buffer *vb2 = vb2_get_buffer(q, i);
> +
> + if (!vb2)
> + continue;
> +
> + ret = vb2_core_qbuf(q, vb2, NULL, NULL);
> if (ret)
> goto err_reqbufs;
> fileio->bufs[i].queued = 1;
> }
Doesn't this part belong to the previous patch that changes q->bufs[x] to
vb2_get_buffer()?
> /*
> * All buffers have been queued, so mark that by setting
> - * initial_index to q->num_buffers
> + * initial_index to num_buffers
What num_buffers?
> */
> - fileio->initial_index = q->num_buffers;
> - fileio->cur_index = q->num_buffers;
> + fileio->initial_index = vb2_get_num_buffers(q);
> + fileio->cur_index = fileio->initial_index;
> }
>
> /*
> @@ -2964,12 +2976,12 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q, char __user *data, size_
> * If we are queuing up buffers for the first time, then
> * increase initial_index by one.
> */
> - if (fileio->initial_index < q->num_buffers)
> + if (fileio->initial_index < vb2_get_num_buffers(q))
> fileio->initial_index++;
> /*
> * The next buffer to use is either a buffer that's going to be
> - * queued for the first time (initial_index < q->num_buffers)
> - * or it is equal to q->num_buffers, meaning that the next
> + * queued for the first time (initial_index < num_buffers)
> + * or it is equal to num_buffers, meaning that the next
What num_buffers?
Best regards,
Tomasz
next prev parent reply other threads:[~2023-11-08 9:42 UTC|newest]
Thread overview: 133+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-31 16:30 [PATCH v14 00/56] Add DELETE_BUF ioctl Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 01/56] media: videobuf2: Rename offset parameter Benjamin Gaignard
2023-11-08 15:11 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 02/56] media: videobuf2: Rework offset 'cookie' encoding pattern Benjamin Gaignard
2023-11-08 6:23 ` Tomasz Figa
2023-11-08 10:14 ` Benjamin Gaignard
2023-11-08 10:31 ` Hans Verkuil
2023-10-31 16:30 ` [PATCH v14 03/56] media: videobuf2: Stop spamming kernel log with all queue counter Benjamin Gaignard
2023-11-08 15:26 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 04/56] media: videobuf2: Use vb2_buffer instead of index Benjamin Gaignard
2023-11-08 8:08 ` Tomasz Figa
2023-11-08 15:52 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 05/56] media: videobuf2: Access vb2_queue bufs array through helper functions Benjamin Gaignard
2023-11-08 8:50 ` Tomasz Figa
2023-11-08 10:24 ` Benjamin Gaignard
2023-11-09 4:27 ` Tomasz Figa
2023-10-31 16:30 ` [PATCH v14 06/56] media: videobuf2: Remove duplicated index vs q->num_buffers check Benjamin Gaignard
2023-11-08 16:46 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 07/56] media: videobuf2: Add helper to get queue number of buffers Benjamin Gaignard
2023-11-08 16:50 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 08/56] media: videobuf2: Use vb2_get_num_buffers() helper Benjamin Gaignard
2023-11-08 9:42 ` Tomasz Figa [this message]
2023-11-08 13:22 ` Benjamin Gaignard
2023-11-09 4:36 ` Tomasz Figa
2023-10-31 16:30 ` [PATCH v14 09/56] media: amphion: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-11-08 16:55 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 10/56] media: amphion: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-11-08 16:56 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 11/56] media: mediatek: jpeg: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-11-08 17:00 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 12/56] media: mediatek: vdec: Remove useless loop Benjamin Gaignard
2023-11-09 9:15 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 13/56] media: mediatek: vcodec: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-11-09 9:21 ` Andrzej Pietrasiewicz
2023-11-09 9:23 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 14/56] media: sti: hva: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-11-09 9:29 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 15/56] media: visl: " Benjamin Gaignard
2023-11-09 9:38 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 16/56] media: atomisp: " Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 17/56] media: atomisp: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 18/56] media: dvb-core: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-11-09 9:46 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 19/56] media: dvb-core: Do not initialize twice queue num_buffer field Benjamin Gaignard
2023-11-09 9:50 ` Andrzej Pietrasiewicz
2023-11-09 10:14 ` Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 20/56] media: dvb-frontends: rtl2832: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-11-09 9:56 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 21/56] media: pci: dt3155: Remove useless check Benjamin Gaignard
2023-11-09 10:03 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 22/56] media: pci: tw686x: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-11-09 10:05 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 23/56] media: pci: cx18: " Benjamin Gaignard
2023-11-09 10:07 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 24/56] media: pci: netup_unidvb: " Benjamin Gaignard
2023-11-09 10:09 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 25/56] media: pci: tw68: " Benjamin Gaignard
2023-11-09 10:13 ` Andrzej Pietrasiewicz
2023-11-09 10:23 ` Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 26/56] media: i2c: video-i2c: " Benjamin Gaignard
2023-11-09 10:18 ` Andrzej Pietrasiewicz
2023-11-09 10:26 ` Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 27/56] media: coda: " Benjamin Gaignard
2023-11-09 10:22 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 28/56] media: nxp: " Benjamin Gaignard
2023-11-09 10:26 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 29/56] media: verisilicon: " Benjamin Gaignard
2023-11-09 10:28 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 30/56] media: test-drivers: " Benjamin Gaignard
2023-11-09 11:10 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 31/56] media: imx: " Benjamin Gaignard
2023-11-09 11:12 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 32/56] media: meson: vdec: " Benjamin Gaignard
2023-11-09 11:17 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 33/56] touchscreen: sur40: " Benjamin Gaignard
2023-11-09 11:19 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 34/56] sample: v4l: " Benjamin Gaignard
2023-11-09 11:19 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 35/56] media: cedrus: " Benjamin Gaignard
2023-11-09 11:27 ` Andrzej Pietrasiewicz
2023-11-09 14:14 ` Paul Kocialkowski
2023-11-09 15:48 ` Andrzej Pietrasiewicz
2023-11-09 15:54 ` Benjamin Gaignard
2023-11-09 16:29 ` Paul Kocialkowski
2023-10-31 16:30 ` [PATCH v14 36/56] media: nuvoton: " Benjamin Gaignard
2023-11-09 11:29 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 37/56] media: renesas: " Benjamin Gaignard
2023-11-09 11:30 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 38/56] media: ti: " Benjamin Gaignard
2023-11-09 11:32 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 39/56] media: usb: airspy: " Benjamin Gaignard
2023-11-09 11:33 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 40/56] media: usb: cx231xx: " Benjamin Gaignard
2023-11-09 11:35 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 41/56] media: usb: hackrf: " Benjamin Gaignard
2023-11-09 11:36 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 42/56] media: usb: usbtv: " Benjamin Gaignard
2023-11-09 11:37 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 43/56] media: videobuf2: Be more flexible on the number of queue stored buffers Benjamin Gaignard
2023-11-02 8:17 ` Hans Verkuil
2023-11-06 14:29 ` Benjamin Gaignard
2023-10-31 16:30 ` [PATCH v14 44/56] media: core: Report the maximum possible number of buffers for the queue Benjamin Gaignard
2023-11-09 12:28 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 45/56] media: test-drivers: vivid: Increase max supported buffers for capture queues Benjamin Gaignard
2023-11-09 12:31 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 46/56] media: test-drivers: vicodec: Increase max supported capture queue buffers Benjamin Gaignard
2023-11-09 12:32 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 47/56] media: verisilicon: Refactor postprocessor to store more buffers Benjamin Gaignard
2023-11-09 13:58 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 48/56] media: verisilicon: Store chroma and motion vectors offset Benjamin Gaignard
2023-11-09 14:12 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 49/56] media: verisilicon: g2: Use common helpers to compute chroma and mv offsets Benjamin Gaignard
2023-11-09 14:25 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 50/56] media: verisilicon: vp9: Allow to change resolution while streaming Benjamin Gaignard
2023-11-09 14:59 ` Andrzej Pietrasiewicz
2023-10-31 16:30 ` [PATCH v14 51/56] media: core: Rework how create_buf index returned value is computed Benjamin Gaignard
2023-10-31 16:31 ` [PATCH v14 52/56] media: core: Add bitmap manage bufs array entries Benjamin Gaignard
2023-11-08 10:44 ` Tomasz Figa
2023-11-08 15:30 ` Benjamin Gaignard
2023-11-09 7:28 ` Tomasz Figa
2023-10-31 16:31 ` [PATCH v14 53/56] media: core: Free range of buffers Benjamin Gaignard
2023-11-09 9:10 ` Tomasz Figa
2023-10-31 16:31 ` [PATCH v14 54/56] media: v4l2: Add DELETE_BUFS ioctl Benjamin Gaignard
2023-11-09 9:30 ` Tomasz Figa
2023-11-09 10:10 ` Benjamin Gaignard
2023-11-10 8:58 ` Tomasz Figa
2023-11-10 9:14 ` Hans Verkuil
2023-11-10 9:19 ` Tomasz Figa
2023-10-31 16:31 ` [PATCH v14 55/56] media: v4l2: Add mem2mem helpers for " Benjamin Gaignard
2023-10-31 16:31 ` [PATCH v14 56/56] media: test-drivers: Use helper " Benjamin Gaignard
2023-11-09 9:43 ` Tomasz Figa
2023-11-09 9:46 ` Benjamin Gaignard
2023-11-09 9:48 ` Tomasz Figa
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=20231108094223.rprskkeee47vaezy@chromium.org \
--to=tfiga@chromium.org \
--cc=benjamin.gaignard@collabora.com \
--cc=ezequiel@vanguardiasur.com.ar \
--cc=gregkh@linuxfoundation.org \
--cc=hverkuil-cisco@xs4all.nl \
--cc=kernel@collabora.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-staging@lists.linux.dev \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=ming.qian@nxp.com \
--cc=nicolas.dufresne@collabora.com \
--cc=p.zabel@pengutronix.de \
/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