[media] remove interface links at media_entity_unregister()
authorMauro Carvalho Chehab <mchehab@osg.samsung.com>
Sat, 29 Aug 2015 22:07:09 +0000 (19:07 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Mon, 11 Jan 2016 14:18:55 +0000 (12:18 -0200)
Interface links connected to an entity should be removed
before the entity itself can be removed.

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/media-device.c

index 96a476eeb16ecb8382584539309fa718d2e207e9..7c37aeab05bbdf6e5bea802fc9fc25a49e2ce83b 100644 (file)
@@ -638,14 +638,30 @@ void media_device_unregister_entity(struct media_entity *entity)
                return;
 
        spin_lock(&mdev->lock);
+
+       /* Remove interface links with this entity on it */
+       list_for_each_entry_safe(link, tmp, &mdev->links, graph_obj.list) {
+               if (media_type(link->gobj1) == MEDIA_GRAPH_ENTITY
+                   && link->entity == entity) {
+                       media_gobj_remove(&link->graph_obj);
+                       kfree(link);
+               }
+       }
+
+       /* Remove all data links that belong to this entity */
        list_for_each_entry_safe(link, tmp, &entity->links, list) {
                media_gobj_remove(&link->graph_obj);
                list_del(&link->list);
                kfree(link);
        }
+
+       /* Remove all pads that belong to this entity */
        for (i = 0; i < entity->num_pads; i++)
                media_gobj_remove(&entity->pads[i].graph_obj);
+
+       /* Remove the entity */
        media_gobj_remove(&entity->graph_obj);
+
        spin_unlock(&mdev->lock);
        entity->graph_obj.mdev = NULL;
 }
This page took 0.046955 seconds and 5 git commands to generate.