Re: [PATCH v16 2/8] media: test-drivers: Set REQBUFS minimum number of buffers
From: Hans Verkuil
Date: Mon Jan 15 2024 - 05:35:36 EST
On 15/12/2023 10:08, Benjamin Gaignard wrote:
> Test drivers require at least 2 buffers to be allocated when
> calling REQBUFS so set queue min_reqbufs_allocation field instead
> of min_queued_buffers.
This is not really correct.
These test drivers set min_queued_buffers (previously min_buffers_needed)
to emulate what happens to actual HW drivers that need this. However, the
test driver code just effectively used that as what is now the
min_reqbufs_allocation value. I.e., it never had 2 buffers queued all the
time, although it still waited until 2 buffers were queued before calling
start_streaming.
Basically it was just an incomplete emulation of min_queued_buffers.
I think it makes sense to convert this over to min_reqbufs_allocation,
and, since that will already default to a minimum of 2 buffers, most
calls to vivid_create_queue() can just pass 0 instead of 2.
In the future we might want to add a real min_queued_buffers emulation,
but that has to ensure that there are always that many buffers in the
driver's queue.
In any case, the commit log has to reflect that we are making a subtle
change in behavior.
> While at it remane vivid_create_queue() parameter.
remane -> rename
>
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxxxxx>
> ---
> drivers/media/test-drivers/vimc/vimc-capture.c | 2 +-
> drivers/media/test-drivers/vivid/vivid-core.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/media/test-drivers/vimc/vimc-capture.c b/drivers/media/test-drivers/vimc/vimc-capture.c
> index 2a2d19d23bab..97693561f1e4 100644
> --- a/drivers/media/test-drivers/vimc/vimc-capture.c
> +++ b/drivers/media/test-drivers/vimc/vimc-capture.c
> @@ -432,7 +432,7 @@ static struct vimc_ent_device *vimc_capture_add(struct vimc_device *vimc,
> q->mem_ops = vimc_allocator == VIMC_ALLOCATOR_DMA_CONTIG
> ? &vb2_dma_contig_memops : &vb2_vmalloc_memops;
> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> - q->min_queued_buffers = 2;
> + q->min_reqbufs_allocation = 2;
> q->lock = &vcapture->lock;
> q->dev = v4l2_dev->dev;
>
> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
> index 159c72cbb5bf..11b8520d9f57 100644
> --- a/drivers/media/test-drivers/vivid/vivid-core.c
> +++ b/drivers/media/test-drivers/vivid/vivid-core.c
> @@ -861,7 +861,7 @@ static const struct media_device_ops vivid_media_ops = {
> static int vivid_create_queue(struct vivid_dev *dev,
> struct vb2_queue *q,
> u32 buf_type,
> - unsigned int min_queued_buffers,
> + unsigned int min_reqbufs_allocation,
> const struct vb2_ops *ops)
> {
> if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE && dev->multiplanar)
> @@ -898,7 +898,7 @@ static int vivid_create_queue(struct vivid_dev *dev,
> q->mem_ops = allocators[dev->inst] == 1 ? &vb2_dma_contig_memops :
> &vb2_vmalloc_memops;
> q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
> - q->min_queued_buffers = supports_requests[dev->inst] ? 0 : min_queued_buffers;
> + q->min_reqbufs_allocation = min_reqbufs_allocation;
> q->lock = &dev->mutex;
> q->dev = dev->v4l2_dev.dev;
> q->supports_requests = supports_requests[dev->inst];
Regards,
Hans