media: uvcvideo: Refactor iterators
authorRicardo Ribalda <ribalda@chromium.org>
Mon, 29 Apr 2024 15:04:42 +0000 (15:04 +0000)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Sat, 4 May 2024 08:19:59 +0000 (10:19 +0200)
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>
drivers/media/usb/uvc/uvc_ctrl.c

index f8ae14b8b4260ddd81d1824a01ddec4126f489e9..4b685f883e4d71f79646cdc94b0e8b56120da62e 100644 (file)
@@ -1850,16 +1850,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;
 }
@@ -2165,7 +2167,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;
@@ -2175,16 +2177,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;