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; >