[v11,45/56] media: test-drivers: vivid: Increase max supported buffers for capture queues

Message ID 20231012114642.19040-46-benjamin.gaignard@collabora.com
State New
Headers
Series Add DELETE_BUF ioctl |

Commit Message

Benjamin Gaignard Oct. 12, 2023, 11:46 a.m. UTC
  Change the maximum number of buffers of some capture queues in order
to test max_num_buffers field.

Allow to allocate up to:
- 64 buffers for video capture queue.
- 1024 buffers for sdr capture queue.
- 32768 buffers for vbi capture queue.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++
 1 file changed, 7 insertions(+)
  

Comments

Hans Verkuil Oct. 16, 2023, 10:32 a.m. UTC | #1
On 12/10/2023 13:46, Benjamin Gaignard wrote:
> Change the maximum number of buffers of some capture queues in order
> to test max_num_buffers field.
> 
> Allow to allocate up to:
> - 64 buffers for video capture queue.
> - 1024 buffers for sdr capture queue.
> - 32768 buffers for vbi capture queue.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
>  drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
> index 394c9f81ea72..b5656330578d 100644
> --- a/drivers/media/test-drivers/vivid/vivid-core.c
> +++ b/drivers/media/test-drivers/vivid/vivid-core.c
> @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev,
>  	q->type = buf_type;
>  	q->io_modes = VB2_MMAP | VB2_DMABUF;
>  	q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ?  VB2_WRITE : VB2_READ;
> +	if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
> +		q->max_num_buffers = 64;
> +	if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
> +		q->max_num_buffers = 1024;
> +	if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
> +		q->max_num_buffers = 32768;

This should use the same calculation as MAX_BUFFER_INDEX.

I wonder if those defines should move to videobuf2-core.h instead.

Regards,

	Hans

> +
>  	if (allocators[dev->inst] != 1)
>  		q->io_modes |= VB2_USERPTR;
>  	q->drv_priv = dev;
  
Benjamin Gaignard Oct. 16, 2023, 2:20 p.m. UTC | #2
Le 16/10/2023 à 12:32, Hans Verkuil a écrit :
> On 12/10/2023 13:46, Benjamin Gaignard wrote:
>> Change the maximum number of buffers of some capture queues in order
>> to test max_num_buffers field.
>>
>> Allow to allocate up to:
>> - 64 buffers for video capture queue.
>> - 1024 buffers for sdr capture queue.
>> - 32768 buffers for vbi capture queue.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>>   drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++
>>   1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
>> index 394c9f81ea72..b5656330578d 100644
>> --- a/drivers/media/test-drivers/vivid/vivid-core.c
>> +++ b/drivers/media/test-drivers/vivid/vivid-core.c
>> @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev,
>>   	q->type = buf_type;
>>   	q->io_modes = VB2_MMAP | VB2_DMABUF;
>>   	q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ?  VB2_WRITE : VB2_READ;
>> +	if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
>> +		q->max_num_buffers = 64;
>> +	if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
>> +		q->max_num_buffers = 1024;
>> +	if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
>> +		q->max_num_buffers = 32768;
> This should use the same calculation as MAX_BUFFER_INDEX.
>
> I wonder if those defines should move to videobuf2-core.h instead.

I'm not sure about what you want here, q->max_num_buffers is clamped in vb2_core_queue_init():

/* The maximum is limited by offset cookie encoding pattern */
q->max_num_buffers = min_t(unsigned int, q->max_num_buffers, MAX_BUFFER_INDEX);

Do you want to reuse MAX_BUFFER_INDEX for these drivers ?

Regards,
Benjamin

>
> Regards,
>
> 	Hans
>
>> +
>>   	if (allocators[dev->inst] != 1)
>>   		q->io_modes |= VB2_USERPTR;
>>   	q->drv_priv = dev;
>
  
Hans Verkuil Oct. 16, 2023, 2:33 p.m. UTC | #3
On 16/10/2023 16:20, Benjamin Gaignard wrote:
> 
> Le 16/10/2023 à 12:32, Hans Verkuil a écrit :
>> On 12/10/2023 13:46, Benjamin Gaignard wrote:
>>> Change the maximum number of buffers of some capture queues in order
>>> to test max_num_buffers field.
>>>
>>> Allow to allocate up to:
>>> - 64 buffers for video capture queue.
>>> - 1024 buffers for sdr capture queue.
>>> - 32768 buffers for vbi capture queue.
>>>
>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>>> ---
>>>   drivers/media/test-drivers/vivid/vivid-core.c | 7 +++++++
>>>   1 file changed, 7 insertions(+)
>>>
>>> diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
>>> index 394c9f81ea72..b5656330578d 100644
>>> --- a/drivers/media/test-drivers/vivid/vivid-core.c
>>> +++ b/drivers/media/test-drivers/vivid/vivid-core.c
>>> @@ -876,6 +876,13 @@ static int vivid_create_queue(struct vivid_dev *dev,
>>>       q->type = buf_type;
>>>       q->io_modes = VB2_MMAP | VB2_DMABUF;
>>>       q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ?  VB2_WRITE : VB2_READ;
>>> +    if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
>>> +        q->max_num_buffers = 64;
>>> +    if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
>>> +        q->max_num_buffers = 1024;
>>> +    if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
>>> +        q->max_num_buffers = 32768;
>> This should use the same calculation as MAX_BUFFER_INDEX.
>>
>> I wonder if those defines should move to videobuf2-core.h instead.
> 
> I'm not sure about what you want here, q->max_num_buffers is clamped in vb2_core_queue_init():
> 
> /* The maximum is limited by offset cookie encoding pattern */
> q->max_num_buffers = min_t(unsigned int, q->max_num_buffers, MAX_BUFFER_INDEX);
> 
> Do you want to reuse MAX_BUFFER_INDEX for these drivers ?

Ah, I forgot about the clamping.

Add a comment like this:

/*
 * The maximum number of buffers is 32768 if PAGE_SHIFT == 12,
 * see also MAX_BUFFER_INDEX in videobuf2-core.c. It will be less if
 * PAGE_SHIFT > 12, but then max_num_buffers will be clamped by
 * videobuf2-core.c to MAX_BUFFER_INDEX.
 */

Regards,

	Hans

> 
> Regards,
> Benjamin
> 
>>
>> Regards,
>>
>>     Hans
>>
>>> +
>>>       if (allocators[dev->inst] != 1)
>>>           q->io_modes |= VB2_USERPTR;
>>>       q->drv_priv = dev;
>>
  

Patch

diff --git a/drivers/media/test-drivers/vivid/vivid-core.c b/drivers/media/test-drivers/vivid/vivid-core.c
index 394c9f81ea72..b5656330578d 100644
--- a/drivers/media/test-drivers/vivid/vivid-core.c
+++ b/drivers/media/test-drivers/vivid/vivid-core.c
@@ -876,6 +876,13 @@  static int vivid_create_queue(struct vivid_dev *dev,
 	q->type = buf_type;
 	q->io_modes = VB2_MMAP | VB2_DMABUF;
 	q->io_modes |= V4L2_TYPE_IS_OUTPUT(buf_type) ?  VB2_WRITE : VB2_READ;
+	if (buf_type == V4L2_BUF_TYPE_VIDEO_CAPTURE)
+		q->max_num_buffers = 64;
+	if (buf_type == V4L2_BUF_TYPE_SDR_CAPTURE)
+		q->max_num_buffers = 1024;
+	if (buf_type == V4L2_BUF_TYPE_VBI_CAPTURE)
+		q->max_num_buffers = 32768;
+
 	if (allocators[dev->inst] != 1)
 		q->io_modes |= VB2_USERPTR;
 	q->drv_priv = dev;