Re: [PATCH] media: subdev: Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 10/10/23 13:49, Sakari Ailus wrote:
> Hi Hans,
> 
> On Tue, Oct 10, 2023 at 12:24:58PM +0200, Hans de Goede wrote:
>> Since the stream API is still experimental it is currently locked away
>> behind the internal, default disabled, v4l2_subdev_enable_streams_api flag.
>>
>> Advertising V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
>> confuses userspace. E.g. it causes the following libcamera error:
>>
>> ERROR SimplePipeline simple.cpp:1497 Failed to reset routes for
>>   /dev/v4l-subdev1: Inappropriate ioctl for device
>>
>> Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
>> to avoid problems like this.
>>
>> Reported-by: Dennis Bonke <admin@xxxxxxxxxxxxxxx>
>> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
>> ---
>> -Clearing the V4L2_SUBDEV_FL_STREAMS flag from sd.flags might seem
>>  appealing as an alternative fix. But this causes various v4l2-core bits
>>  to enter different code paths which confuses drivers which set
>>  V4L2_SUBDEV_FL_STREAMS, so this is a bad idea.
> 
> Thanks, this apparently had been missed while disabling the API.
> 
> Probably also should be added:
> 
> Fixes: 9a6b5bf4c1bb ("media: add V4L2_SUBDEV_CAP_STREAMS")
> Cc: stable@xxxxxxxxxxxxxxx # for >= 6.3
> 
> Also cc'd Tomi.

Should this be queued up as a 6.6 fix?

Regards,

	Hans V.

> 
>> -No Closes: for the Reported-by since this was reported by private email
>> ---
>>  drivers/media/v4l2-core/v4l2-subdev.c | 7 +++++++
>>  1 file changed, 7 insertions(+)
>>
>> diff --git a/drivers/media/v4l2-core/v4l2-subdev.c b/drivers/media/v4l2-core/v4l2-subdev.c
>> index b92348ad61f6..31752c06d1f0 100644
>> --- a/drivers/media/v4l2-core/v4l2-subdev.c
>> +++ b/drivers/media/v4l2-core/v4l2-subdev.c
>> @@ -502,6 +502,13 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg,
>>  				       V4L2_SUBDEV_CLIENT_CAP_STREAMS;
>>  	int rval;
>>  
>> +	/*
>> +	 * If the streams API is not enabled, remove V4L2_SUBDEV_CAP_STREAMS.
>> +	 * Remove this when the API is no longer experimental.
>> +	 */
>> +	if (!v4l2_subdev_enable_streams_api)
>> +		streams_subdev = false;
>> +
>>  	switch (cmd) {
>>  	case VIDIOC_SUBDEV_QUERYCAP: {
>>  		struct v4l2_subdev_capability *cap = arg;
> 




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux