All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Ricardo Ribalda <ribalda@chromium.org>
Cc: Mauro Carvalho Chehab <mchehab@kernel.org>,
	Hans Verkuil <hverkuil-cisco@xs4all.nl>,
	Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
	linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	tfiga@chromium.org
Subject: Re: [PATCH v9 15/22] media: uvcvideo: Set error_idx during ctrl_commit errors
Date: Thu, 10 Jun 2021 20:05:23 +0300	[thread overview]
Message-ID: <YMJGU65navuuEjnA@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20210326095840.364424-16-ribalda@chromium.org>

Hi Ricardo,

Thank you for the patch.

On Fri, Mar 26, 2021 at 10:58:33AM +0100, Ricardo Ribalda wrote:
> If we have an error setting a control, return the affected control in
> the error_idx field.
> 
> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
> ---
>  drivers/media/usb/uvc/uvc_ctrl.c | 42 ++++++++++++++++++++++++++------
>  drivers/media/usb/uvc/uvc_v4l2.c |  2 +-
>  drivers/media/usb/uvc/uvcvideo.h | 10 +++-----
>  3 files changed, 40 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
> index 24fd5afc4e4f..bcebf9d1a46f 100644
> --- a/drivers/media/usb/uvc/uvc_ctrl.c
> +++ b/drivers/media/usb/uvc/uvc_ctrl.c
> @@ -1586,7 +1586,7 @@ int uvc_ctrl_begin(struct uvc_video_chain *chain)
>  }
>  
>  static int uvc_ctrl_commit_entity(struct uvc_device *dev,
> -	struct uvc_entity *entity, int rollback)
> +	struct uvc_entity *entity, int rollback, struct uvc_control **err_ctrl)
>  {
>  	struct uvc_control *ctrl;
>  	unsigned int i;
> @@ -1628,31 +1628,59 @@ static int uvc_ctrl_commit_entity(struct uvc_device *dev,
>  
>  		ctrl->dirty = 0;
>  
> -		if (ret < 0)
> +		if (ret < 0) {
> +			if (err_ctrl)
> +				*err_ctrl = ctrl;
>  			return ret;
> +		}
>  	}
>  
>  	return 0;
>  }
>  
> +static int uvc_ctrl_find_ctrlidx(struct uvc_entity *entity,

s/uvc_ctrl_find_ctrlidx/uvc_ctrl_find_ctrl_idx/

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> +				 struct v4l2_ext_controls *ctrls,
> +				 struct uvc_control *uvc_control)
> +{
> +	struct uvc_control_mapping *mapping;
> +	struct uvc_control *ctrl_found;
> +	unsigned int i;
> +
> +	if (!entity)
> +		return ctrls->count;
> +
> +	for (i = 0; i < ctrls->count; i++) {
> +		__uvc_find_control(entity, ctrls->controls[i].id, &mapping,
> +				   &ctrl_found, 0);
> +		if (uvc_control == ctrl_found)
> +			return i;
> +	}
> +
> +	return ctrls->count;
> +}
> +
>  int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback,
> -		      const struct v4l2_ext_control *xctrls,
> -		      unsigned int xctrls_count)
> +		      struct v4l2_ext_controls *ctrls)
>  {
>  	struct uvc_video_chain *chain = handle->chain;
> +	struct uvc_control *err_ctrl;
>  	struct uvc_entity *entity;
>  	int ret = 0;
>  
>  	/* Find the control. */
>  	list_for_each_entry(entity, &chain->entities, chain) {
> -		ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback);
> +		ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback,
> +					     &err_ctrl);
>  		if (ret < 0)
>  			goto done;
>  	}
>  
>  	if (!rollback)
> -		uvc_ctrl_send_events(handle, xctrls, xctrls_count);
> +		uvc_ctrl_send_events(handle, ctrls->controls, ctrls->count);
>  done:
> +	if (ret < 0 && ctrls)
> +		ctrls->error_idx = uvc_ctrl_find_ctrlidx(entity, ctrls,
> +							 err_ctrl);
>  	mutex_unlock(&chain->ctrl_mutex);
>  	return ret;
>  }
> @@ -2110,7 +2138,7 @@ int uvc_ctrl_restore_values(struct uvc_device *dev)
>  			ctrl->dirty = 1;
>  		}
>  
> -		ret = uvc_ctrl_commit_entity(dev, entity, 0);
> +		ret = uvc_ctrl_commit_entity(dev, entity, 0, NULL);
>  		if (ret < 0)
>  			return ret;
>  	}
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index a3ee1dc003fc..8d8b12a4db34 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -1088,7 +1088,7 @@ static int uvc_ioctl_s_try_ext_ctrls(struct uvc_fh *handle,
>  	ctrls->error_idx = 0;
>  
>  	if (ioctl == VIDIOC_S_EXT_CTRLS)
> -		return uvc_ctrl_commit(handle, ctrls->controls, ctrls->count);
> +		return uvc_ctrl_commit(handle, ctrls);
>  	else
>  		return uvc_ctrl_rollback(handle);
>  }
> diff --git a/drivers/media/usb/uvc/uvcvideo.h b/drivers/media/usb/uvc/uvcvideo.h
> index 9471c342a310..0313b30f0cea 100644
> --- a/drivers/media/usb/uvc/uvcvideo.h
> +++ b/drivers/media/usb/uvc/uvcvideo.h
> @@ -887,17 +887,15 @@ void uvc_ctrl_status_event(struct uvc_video_chain *chain,
>  
>  int uvc_ctrl_begin(struct uvc_video_chain *chain);
>  int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback,
> -		      const struct v4l2_ext_control *xctrls,
> -		      unsigned int xctrls_count);
> +		      struct v4l2_ext_controls *ctrls);
>  static inline int uvc_ctrl_commit(struct uvc_fh *handle,
> -				  const struct v4l2_ext_control *xctrls,
> -				  unsigned int xctrls_count)
> +				  struct v4l2_ext_controls *ctrls)
>  {
> -	return __uvc_ctrl_commit(handle, 0, xctrls, xctrls_count);
> +	return __uvc_ctrl_commit(handle, 0, ctrls);
>  }
>  static inline int uvc_ctrl_rollback(struct uvc_fh *handle)
>  {
> -	return __uvc_ctrl_commit(handle, 1, NULL, 0);
> +	return __uvc_ctrl_commit(handle, 1, NULL);
>  }
>  
>  int uvc_ctrl_get(struct uvc_video_chain *chain, struct v4l2_ext_control *xctrl);

-- 
Regards,

Laurent Pinchart

  reply	other threads:[~2021-06-10 17:05 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-26  9:58 [PATCH v9 00/22] uvcvideo: Fix v4l2-compliance errors Ricardo Ribalda
2021-03-26  9:58 ` [PATCH v9 01/22] media: v4l2-ioctl: Fix check_ext_ctrls Ricardo Ribalda
2021-06-10 16:19   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 02/22] media: pvrusb2: Do not check for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda
2021-06-10 17:29   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 03/22] media: uvcvideo: " Ricardo Ribalda
2021-06-10 16:21   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 04/22] media: v4l2-ioctl: S_CTRL output the right value Ricardo Ribalda
2021-06-10 16:23   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 05/22] media: uvcvideo: Remove s_ctrl and g_ctrl Ricardo Ribalda
2021-06-10 16:24   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 06/22] media: uvcvideo: Set capability in s_param Ricardo Ribalda
2021-03-26  9:58 ` [PATCH v9 07/22] media: uvcvideo: Return -EIO for control errors Ricardo Ribalda
2021-03-26  9:58 ` [PATCH v9 08/22] media: uvcvideo: refactor __uvc_ctrl_add_mapping Ricardo Ribalda
2021-03-26  9:58 ` [PATCH v9 09/22] media: uvcvideo: Add support for V4L2_CTRL_TYPE_CTRL_CLASS Ricardo Ribalda
2021-06-10 16:42   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 10/22] media: uvcvideo: Use dev->name for querycap() Ricardo Ribalda
2021-06-10 16:44   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 11/22] media: uvcvideo: Set unique vdev name based in type Ricardo Ribalda
2021-06-10 16:45   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 12/22] media: uvcvideo: Increase the size of UVC_METADATA_BUF_SIZE Ricardo Ribalda
2021-06-10 16:48   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 13/22] media: uvcvideo: Use control names from framework Ricardo Ribalda
2021-06-10 16:50   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 14/22] media: uvcvideo: Check controls flags before accessing them Ricardo Ribalda
2021-06-10 16:55   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 15/22] media: uvcvideo: Set error_idx during ctrl_commit errors Ricardo Ribalda
2021-06-10 17:05   ` Laurent Pinchart [this message]
2021-03-26  9:58 ` [PATCH v9 16/22] media: uvcvideo: Return -EACCES to inactive controls Ricardo Ribalda
2021-03-27 11:23   ` Hans Verkuil
2021-06-10 17:28   ` Laurent Pinchart
2021-06-10 18:40     ` Ricardo Ribalda
2021-06-10 19:47       ` Ricardo Ribalda Delgado
2021-03-26  9:58 ` [PATCH v9 17/22] media: docs: Document the behaviour of uvcdriver Ricardo Ribalda
2021-03-27 11:19   ` Hans Verkuil
2021-03-27 12:01     ` Ricardo Ribalda
2021-03-27 12:03       ` Hans Verkuil
2021-06-10 17:08       ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 18/22] media: uvcvideo: Downgrade control error messages Ricardo Ribalda
2021-03-27 11:19   ` Hans Verkuil
2021-06-10 16:59   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 19/22] uvcvideo: uvc_ctrl_is_accessible: check for INACTIVE Ricardo Ribalda
2021-03-27 12:26   ` Ricardo Ribalda Delgado
2021-03-26  9:58 ` [PATCH v9 20/22] uvcvideo: improve error handling in uvc_query_ctrl() Ricardo Ribalda
2021-06-10 17:14   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 21/22] uvcvideo: don't spam the log in uvc_ctrl_restore_values() Ricardo Ribalda
2021-06-10 16:57   ` Laurent Pinchart
2021-03-26  9:58 ` [PATCH v9 22/22] uvc: use vb2 ioctl and fop helpers Ricardo Ribalda
2021-04-02  2:50   ` Tomasz Figa
2021-05-25  8:06 ` [PATCH v9 00/22] uvcvideo: Fix v4l2-compliance errors Tomasz Figa

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=YMJGU65navuuEjnA@pendragon.ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.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.