public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: Ricardo Ribalda <ribalda@chromium.org>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Tomasz Figa <tfiga@chromium.org>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	senozhatsky@chromium.org
Subject: Re: [PATCH v2 4/6] media: uvcvideo: set error_idx to count on EACCESS
Date: Fri, 12 Mar 2021 12:18:57 +0200	[thread overview]
Message-ID: <YEtAEUbJr2mosKow@pendragon.ideasonboard.com> (raw)
In-Reply-To: <e5860193-a672-96b8-9a40-5f6d77dd4783@xs4all.nl>

Hi Hans,

On Fri, Mar 12, 2021 at 08:14:13AM +0100, Hans Verkuil wrote:
> On 11/03/2021 23:19, Ricardo Ribalda wrote:
> > According to the doc:
> > The, in hindsight quite poor, solution for that is to set error_idx to
> > count if the validation failed.
> 
> I think this needs a bit more explanation. How about this:
> 
> "If an error is found when validating the list of controls passed with
> VIDIOC_G_EXT_CTRLS, then error_idx shall be set to ctrls->count to indicate
> to userspace that no actual hardware was touched.
> 
> It would have been much nicer of course if error_idx could point to the
> control index that failed the validation, but sadly that's not how the
> API was designed."

Here's what I commented on v1:

The [V4L2 spec] states:

"This check is done to avoid leaving the hardware in an inconsistent
state due to easy-to-avoid problems. But it leads to another problem:
the application needs to know whether an error came from the validation
step (meaning that the hardware was not touched) or from an error during
the actual reading from/writing to hardware."

I'm not sure this is correct though. -EACCES is returned by
__uvc_ctrl_get() when the control is found and is a write-only control.
The uvc_ctrl_get() calls for the previous controls will have potentially
touched the device to read the current control value if it wasn't cached
already, to this contradicts the rationale from the specification.

I understand the need for this when setting controls, but when reading
them, it's more puzzling, as the interactions with the hardware to read
the controls are not supposed to affect the hardware state in a way that
applications should care about. It may be an issue in the V4L2
specification.

> > 
> > Fixes v4l2-compliance:
> > Control ioctls (Input 0):
> >                 fail: v4l2-test-controls.cpp(645): invalid error index write only control
> >         test VIDIOC_G/S/TRY_EXT_CTRLS: FAIL
> > 
> > Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> 
> After improving the commit log you can add my:
> 
> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> 
> > ---
> >  drivers/media/usb/uvc/uvc_v4l2.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> > index 157310c0ca87..36eb48622d48 100644
> > --- a/drivers/media/usb/uvc/uvc_v4l2.c
> > +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> > @@ -1073,7 +1073,8 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
> >  		ret = uvc_ctrl_get(chain, ctrl);
> >  		if (ret < 0) {
> >  			uvc_ctrl_rollback(handle);
> > -			ctrls->error_idx = i;
> > +			ctrls->error_idx = (ret == -EACCES) ?
> > +						ctrls->count : i;
> >  			return ret;
> >  		}
> >  	}

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-03-12 10:20 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 22:19 [PATCH v2 0/6] uvcvideo: Fix v4l2-compliance errors Ricardo Ribalda
2021-03-11 22:19 ` [PATCH v2 1/6] media: v4l2-ioctl: Fix check_ext_ctrls Ricardo Ribalda
2021-03-11 23:43   ` Laurent Pinchart
2021-03-11 22:19 ` [PATCH v2 2/6] media: uvcvideo: Set capability in s_param Ricardo Ribalda
2021-03-12  7:07   ` Hans Verkuil
2021-03-11 22:19 ` [PATCH v2 3/6] media: uvcvideo: Return -EIO for control errors Ricardo Ribalda
2021-03-11 22:50   ` Laurent Pinchart
2021-03-11 22:59     ` Ricardo Ribalda Delgado
2021-03-11 23:30       ` Laurent Pinchart
2021-03-12  6:51         ` Ricardo Ribalda Delgado
2021-03-12  7:08   ` Hans Verkuil
2021-03-11 22:19 ` [PATCH v2 4/6] media: uvcvideo: set error_idx to count on EACCESS Ricardo Ribalda
2021-03-11 23:40   ` Laurent Pinchart
2021-03-12  7:14   ` Hans Verkuil
2021-03-12 10:18     ` Laurent Pinchart [this message]
2021-03-11 22:19 ` [PATCH v2 5/6] media: uvcvideo: Add support for V4L2_CTRL_TYPE_CTRL_CLASS Ricardo Ribalda
2021-03-12  1:21   ` Laurent Pinchart
2021-03-12  9:57     ` Ricardo Ribalda Delgado
2021-03-12 10:13       ` Laurent Pinchart
2021-03-12 10:22         ` Hans Verkuil
2021-03-12 10:56           ` Laurent Pinchart
2021-03-11 22:19 ` [PATCH v2 6/6] media: uvcvideo: Set a different name for the metadata entity Ricardo Ribalda
2021-03-11 23:38   ` Laurent Pinchart
2021-03-12  7:17     ` Hans Verkuil

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=YEtAEUbJr2mosKow@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hverkuil@xs4all.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=senozhatsky@chromium.org \
    --cc=tfiga@chromium.org \
    /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