Em Mon, 12 Oct 2015 22:51:07 +0300 Sakari Ailus sakari.ailus@iki.fi escreveu:
Hi Mauro,
On Mon, Oct 12, 2015 at 01:42:56PM -0300, Mauro Carvalho Chehab wrote:
Just like entities and pads, links also need to have unique Object IDs along a given media controller.
So, let's add a media_gobj inside it and initialize the object then a new link is created.
Change-Id: I38e773224d47a33158279dc7099635285493345b Signed-off-by: Mauro Carvalho Chehab mchehab@osg.samsung.com Acked-by: Hans Verkuil hans.verkuil@cisco.com
drivers/media/media-device.c | 9 +++++++++ drivers/media/media-entity.c | 9 +++++++++ include/media/media-device.h | 2 ++ include/media/media-entity.h | 3 +++ 4 files changed, 23 insertions(+)
diff --git a/drivers/media/media-device.c b/drivers/media/media-device.c index 3bdda16584fe..065f6f08da37 100644 --- a/drivers/media/media-device.c +++ b/drivers/media/media-device.c @@ -438,6 +438,13 @@ int __must_check media_device_register_entity(struct media_device *mdev, media_gobj_init(mdev, MEDIA_GRAPH_ENTITY, &entity->graph_obj); list_add_tail(&entity->list, &mdev->entities);
- /*
* Initialize objects at the links
* in the case where links got created before entity register
*/
- for (i = 0; i < entity->num_links; i++)
media_gobj_init(mdev, MEDIA_GRAPH_LINK,
/* Initialize objects at the pads */ for (i = 0; i < entity->num_pads; i++) media_gobj_init(mdev, MEDIA_GRAPH_PAD,&entity->links[i].graph_obj);
@@ -465,6 +472,8 @@ void media_device_unregister_entity(struct media_entity *entity) return;
spin_lock(&mdev->lock);
- for (i = 0; i < entity->num_links; i++)
for (i = 0; i < entity->num_pads; i++) media_gobj_remove(&entity->pads[i].graph_obj); media_gobj_remove(&entity->graph_obj);media_gobj_remove(&entity->links[i].graph_obj);
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index 377c6655c5d0..36d725ec5f3d 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -51,6 +51,9 @@ void media_gobj_init(struct media_device *mdev, case MEDIA_GRAPH_PAD: gobj->id = media_gobj_gen_id(type, ++mdev->pad_id); break;
- case MEDIA_GRAPH_LINK:
gobj->id = media_gobj_gen_id(type, ++mdev->link_id);
}break;
}
@@ -491,6 +494,9 @@ media_entity_create_link(struct media_entity *source, u16 source_pad, link->sink = &sink->pads[sink_pad]; link->flags = flags;
- /* Initialize graph object embedded at the new link */
- media_gobj_init(source->parent, MEDIA_GRAPH_LINK, &link->graph_obj);
- /* Create the backlink. Backlinks are used to help graph traversal and
*/
- are not reported to userspace.
@@ -504,6 +510,9 @@ media_entity_create_link(struct media_entity *source, u16 source_pad, backlink->sink = &sink->pads[sink_pad]; backlink->flags = flags;
- /* Initialize graph object embedded at the new link */
- media_gobj_init(sink->parent, MEDIA_GRAPH_LINK, &backlink->graph_obj);
When you eventually remove the link, does the link graph object get released as well? I couldn't find that.
Yes, it is removed. I'm pretty sure I checked it. That's btw one of the reasons why I added the debug message at media_gobj_init() and media_gobj_remove(): to check if the init and remove logic were matching.
Regards, Mauro