]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: uvcvideo: Refactor iterators
authorRicardo Ribalda <ribalda@chromium.org>
Mon, 29 Apr 2024 15:04:42 +0000 (15:04 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Mar 2025 15:56:32 +0000 (16:56 +0100)
[ Upstream commit 64627daf0c5f7838111f52bbbd1a597cb5d6871a ]

Avoid using the iterators after the list_for_each() constructs.
This patch should be a NOP, but makes cocci, happier:

drivers/media/usb/uvc/uvc_ctrl.c:1861:44-50: ERROR: invalid reference to the index variable of the iterator on line 1850
drivers/media/usb/uvc/uvc_ctrl.c:2195:17-23: ERROR: invalid reference to the index variable of the iterator on line 2179

Reviewed-by: Sergey Senozhatsky <senozhatsky@chromium.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Ricardo Ribalda <ribalda@chromium.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Stable-dep-of: d9fecd096f67 ("media: uvcvideo: Only save async fh if success")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/usb/uvc/uvc_ctrl.c

index 1bad64f4499ae9b535d2b720a2e65c8864c40fa1..986e94f7164a6d933e2debf69a3fb638c219dcd0 100644 (file)
@@ -1786,16 +1786,18 @@ int __uvc_ctrl_commit(struct uvc_fh *handle, int rollback,
        list_for_each_entry(entity, &chain->entities, chain) {
                ret = uvc_ctrl_commit_entity(chain->dev, entity, rollback,
                                             &err_ctrl);
-               if (ret < 0)
+               if (ret < 0) {
+                       if (ctrls)
+                               ctrls->error_idx =
+                                       uvc_ctrl_find_ctrl_idx(entity, ctrls,
+                                                              err_ctrl);
                        goto done;
+               }
        }
 
        if (!rollback)
                uvc_ctrl_send_events(handle, ctrls->controls, ctrls->count);
 done:
-       if (ret < 0 && ctrls)
-               ctrls->error_idx = uvc_ctrl_find_ctrl_idx(entity, ctrls,
-                                                         err_ctrl);
        mutex_unlock(&chain->ctrl_mutex);
        return ret;
 }
@@ -2100,7 +2102,7 @@ static int uvc_ctrl_init_xu_ctrl(struct uvc_device *dev,
 int uvc_xu_ctrl_query(struct uvc_video_chain *chain,
        struct uvc_xu_control_query *xqry)
 {
-       struct uvc_entity *entity;
+       struct uvc_entity *entity, *iter;
        struct uvc_control *ctrl;
        unsigned int i;
        bool found;
@@ -2110,16 +2112,16 @@ int uvc_xu_ctrl_query(struct uvc_video_chain *chain,
        int ret;
 
        /* Find the extension unit. */
-       found = false;
-       list_for_each_entry(entity, &chain->entities, chain) {
-               if (UVC_ENTITY_TYPE(entity) == UVC_VC_EXTENSION_UNIT &&
-                   entity->id == xqry->unit) {
-                       found = true;
+       entity = NULL;
+       list_for_each_entry(iter, &chain->entities, chain) {
+               if (UVC_ENTITY_TYPE(iter) == UVC_VC_EXTENSION_UNIT &&
+                   iter->id == xqry->unit) {
+                       entity = iter;
                        break;
                }
        }
 
-       if (!found) {
+       if (!entity) {
                uvc_dbg(chain->dev, CONTROL, "Extension unit %u not found\n",
                        xqry->unit);
                return -ENOENT;