media: xilinx-vipp: Look for entities also in waiting_list
authorSakari Ailus <sakari.ailus@linux.intel.com>
Fri, 29 Sep 2023 06:31:08 +0000 (09:31 +0300)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Wed, 11 Oct 2023 13:26:16 +0000 (15:26 +0200)
The big V4L2 async framework overhaul simplified linked lists used by the
V4L2 async framework. This affected a few drivers and it turns out a few
of those drivers rely on searching for entities in both async notifier's
waiting and done lists. Do that by separately traversing both.

Fixes: 9bf19fbf0c8b ("media: v4l: async: Rework internal lists")
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/platform/xilinx/xilinx-vipp.c

index 4285770..996684a 100644 (file)
@@ -55,11 +55,18 @@ xvip_graph_find_entity(struct xvip_composite_device *xdev,
 {
        struct xvip_graph_entity *entity;
        struct v4l2_async_connection *asd;
-
-       list_for_each_entry(asd, &xdev->notifier.done_list, asc_entry) {
-               entity = to_xvip_entity(asd);
-               if (entity->asd.match.fwnode == fwnode)
-                       return entity;
+       struct list_head *lists[] = {
+               &xdev->notifier.done_list,
+               &xdev->notifier.waiting_list
+       };
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(lists); i++) {
+               list_for_each_entry(asd, lists[i], asc_entry) {
+                       entity = to_xvip_entity(asd);
+                       if (entity->asd.match.fwnode == fwnode)
+                               return entity;
+               }
        }
 
        return NULL;