All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	tfiga@chromium.org, Hans Verkuil <hans.verkuil@cisco.com>
Subject: Re: [PATCH v10 18/21] uvcvideo: improve error handling in uvc_query_ctrl()
Date: Mon, 23 Aug 2021 02:52:34 +0300	[thread overview]
Message-ID: <YSLjQqzmR2ZqN6+p@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20210618122923.385938-19-ribalda@chromium.org>

Hi Ricardo and Hans,

Thank you for the patch.

Please add a "media: " prefix to the subject line. Same for the other
patches in the series that are missing this.

On Fri, Jun 18, 2021 at 02:29:20PM +0200, Ricardo Ribalda wrote:
> From: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> 
> - If __uvc_query_ctrl() failed with a non-EPIPE error, then
>   report that with dev_err. If an error code is obtained, then
>   report that with dev_dbg.
> 
> - For error 2 (Wrong state) return -EACCES instead of -EILSEQ.
>   EACCES is a much more appropriate error code. EILSEQ will return
>   "Invalid or incomplete multibyte or wide character." in strerror(),
>   which is a *very* confusing message.

I would still have split the patch in two :-)

> Reviewed-by: Ricardo Ribalda <ribalda@chromium.org>
> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
> ---
>  drivers/media/usb/uvc/uvc_video.c | 38 ++++++++++++++++++-------------
>  1 file changed, 22 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_video.c b/drivers/media/usb/uvc/uvc_video.c
> index daba5fe352ea..00488f15cdbf 100644
> --- a/drivers/media/usb/uvc/uvc_video.c
> +++ b/drivers/media/usb/uvc/uvc_video.c
> @@ -79,15 +79,11 @@ int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
>  	if (likely(ret == size))
>  		return 0;
>  
> -	dev_err(&dev->udev->dev,
> -		"Failed to query (%s) UVC control %u on unit %u: %d (exp. %u).\n",
> -		uvc_query_name(query), cs, unit, ret, size);
> -
> -	if (ret != -EPIPE)
> -		return ret;
> +	if (ret < 0 && ret != -EPIPE)

What if ret >= 0 ? There's a change of behaviour here that isn't
documented in the commit message. It shouldn't happen, but it would be
nice to handle it correctly.

> +		goto err;
>  
> +	/* reuse data[0] to request the error code. */
>  	tmp = *(u8 *)data;
> -
>  	ret = __uvc_query_ctrl(dev, UVC_GET_CUR, 0, intfnum,
>  			       UVC_VC_REQUEST_ERROR_CODE_CONTROL, data, 1,
>  			       UVC_CTRL_CONTROL_TIMEOUT);
> @@ -95,19 +91,21 @@ int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
>  	error = *(u8 *)data;
>  	*(u8 *)data = tmp;
>  
> -	if (ret != 1)
> -		return ret < 0 ? ret : -EPIPE;
> +	if (ret != 1) {
> +		ret = ret < 0 ? ret : -EPIPE;
> +		goto err;

This will print an error message that doesn't match the error.

> +	}
>  
> -	uvc_dbg(dev, CONTROL, "Control error %u\n", error);
> +	if (error >=1 && error <=8)

Missing space before 1 and 8.

> +		uvc_dbg(dev, CONTROL,
> +			"Failed to query (%s) UVC control %u on unit %u: got error %u.\n",
> +			uvc_query_name(query), cs, unit, error);
>  
>  	switch (error) {
> -	case 0:
> -		/* Cannot happen - we received a STALL */
> -		return -EPIPE;
>  	case 1: /* Not ready */
>  		return -EBUSY;
>  	case 2: /* Wrong state */
> -		return -EILSEQ;
> +		return -EACCES;
>  	case 3: /* Power */
>  		return -EREMOTE;
>  	case 4: /* Out of range */
> @@ -123,10 +121,18 @@ int uvc_query_ctrl(struct uvc_device *dev, u8 query, u8 unit,
>  	case 8: /* Invalid value within range */
>  		return -EINVAL;
>  	default: /* reserved or unknown */
> -		break;
> +		dev_err(&dev->udev->dev,
> +			"Failed to query (%s) UVC control %u on unit %u: got error %u.\n",
> +			uvc_query_name(query), cs, unit, error);
> +		return -EPIPE;
>  	}
>  
> -	return -EPIPE;
> +err:
> +	dev_err(&dev->udev->dev,
> +		"Failed to query (%s) UVC control %u on unit %u: %d (exp. %u).\n",
> +		uvc_query_name(query), cs, unit, ret, size);
> +
> +	return ret;
>  }
>  
>  static void uvc_fixup_video_ctrl(struct uvc_streaming *stream,

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-08-22 23:52 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-18 12:29 [PATCH v10 00/21] Fix v4l2-compliance errors Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 01/21] media: v4l2-ioctl: Fix check_ext_ctrls Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 02/21] media: pvrusb2: Do not check for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 03/21] media: uvcvideo: " Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 04/21] media: v4l2-ioctl: S_CTRL output the right value Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 05/21] media: uvcvideo: Remove s_ctrl and g_ctrl Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 06/21] media: uvcvideo: Set capability in s_param Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 07/21] media: uvcvideo: Return -EIO for control errors Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 08/21] media: uvcvideo: refactor __uvc_ctrl_add_mapping Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 09/21] media: uvcvideo: Add support for V4L2_CTRL_TYPE_CTRL_CLASS Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 10/21] media: uvcvideo: Use dev->name for querycap() Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 11/21] media: uvcvideo: Set unique vdev name based in type Ricardo Ribalda
2021-12-06 19:05   ` [REGRESSION] " Nicolas Dufresne
2021-12-06 19:15     ` Laurent Pinchart
2021-06-18 12:29 ` [PATCH v10 12/21] media: uvcvideo: Increase the size of UVC_METADATA_BUF_SIZE Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 13/21] media: uvcvideo: Use control names from framework Ricardo Ribalda
2021-09-03 10:10   ` Mauro Carvalho Chehab
2021-09-03 10:33     ` Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 14/21] media: uvcvideo: Check controls flags before accessing them Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 15/21] media: uvcvideo: Set error_idx during ctrl_commit errors Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 16/21] media: docs: Document the behaviour of uvcvideo driver Ricardo Ribalda
2021-06-18 12:29 ` [PATCH v10 17/21] uvcvideo: uvc_ctrl_is_accessible: check for INACTIVE Ricardo Ribalda
2021-08-22 23:40   ` Laurent Pinchart
2021-06-18 12:29 ` [PATCH v10 18/21] uvcvideo: improve error handling in uvc_query_ctrl() Ricardo Ribalda
2021-08-22 23:52   ` Laurent Pinchart [this message]
2021-06-18 12:29 ` [PATCH v10 19/21] uvcvideo: don't spam the log in uvc_ctrl_restore_values() Ricardo Ribalda
2021-08-22 23:23   ` Laurent Pinchart
2021-08-23  0:17   ` Laurent Pinchart
2021-08-23  7:32     ` Hans Verkuil
2021-06-18 12:29 ` [PATCH v10 20/21] uvc: use vb2 ioctl and fop helpers Ricardo Ribalda
2021-08-23  0:00   ` Laurent Pinchart
2021-06-18 12:29 ` [PATCH v10 21/21] media: uvcvideo: Return -EACCES to inactive controls Ricardo Ribalda
2021-06-25 10:29   ` Ricardo Ribalda
2021-06-25 11:06     ` Hans Verkuil
2021-06-25 13:55       ` Ricardo Ribalda
2021-06-30  9:02         ` Hans Verkuil
2021-06-30 12:51           ` Ricardo Ribalda
2021-07-06 14:18             ` Hans Verkuil
2021-07-07  9:07               ` Ricardo Ribalda

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=YSLjQqzmR2ZqN6+p@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=hans.verkuil@cisco.com \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@kernel.org \
    --cc=ribalda@chromium.org \
    --cc=sergey.senozhatsky@gmail.com \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.