Message ID | a8a7c85fad0ca6f9661fb9dd4e30623428959b35.1440902901.git.mchehab@osg.samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 08/30/2015 05:07 AM, Mauro Carvalho Chehab wrote: > Add functions to explicitly unregister all entity links. > This function is called automatically when an entity > link is destroyed. > > Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Acked-by: Hans Verkuil <hans.verkuil@cisco.com> > > diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c > index c18f4af52771..96303a0ade59 100644 > --- a/drivers/media/media-entity.c > +++ b/drivers/media/media-entity.c > @@ -903,6 +903,7 @@ EXPORT_SYMBOL_GPL(media_devnode_create); > > void media_devnode_remove(struct media_intf_devnode *devnode) > { > + media_remove_intf_links(&devnode->intf); > media_gobj_remove(&devnode->intf.graph_obj); > kfree(devnode); > } > @@ -944,3 +945,25 @@ void media_remove_intf_link(struct media_link *link) > mutex_unlock(&link->graph_obj.mdev->graph_mutex); > } > EXPORT_SYMBOL_GPL(media_remove_intf_link); > + > +void __media_remove_intf_links(struct media_interface *intf) > +{ > + struct media_link *link, *tmp; > + > + list_for_each_entry_safe(link, tmp, &intf->links, list) > + __media_remove_intf_link(link); > + > +} > +EXPORT_SYMBOL_GPL(__media_remove_intf_links); > + > +void media_remove_intf_links(struct media_interface *intf) > +{ > + /* Do nothing if the intf is not registered. */ > + if (intf->graph_obj.mdev == NULL) > + return; > + > + mutex_lock(&intf->graph_obj.mdev->graph_mutex); > + __media_remove_intf_links(intf); > + mutex_unlock(&intf->graph_obj.mdev->graph_mutex); > +} > +EXPORT_SYMBOL_GPL(media_remove_intf_links); > diff --git a/include/media/media-entity.h b/include/media/media-entity.h > index 8c344a07636c..0e7e193a6736 100644 > --- a/include/media/media-entity.h > +++ b/include/media/media-entity.h > @@ -318,6 +318,9 @@ struct media_link *media_create_intf_link(struct media_entity *entity, > struct media_interface *intf, > u32 flags); > void media_remove_intf_link(struct media_link *link); > +void __media_remove_intf_links(struct media_interface *intf); > +void media_remove_intf_links(struct media_interface *intf); > + > > #define media_entity_call(entity, operation, args...) \ > (((entity)->ops && (entity)->ops->operation) ? \ > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c index c18f4af52771..96303a0ade59 100644 --- a/drivers/media/media-entity.c +++ b/drivers/media/media-entity.c @@ -903,6 +903,7 @@ EXPORT_SYMBOL_GPL(media_devnode_create); void media_devnode_remove(struct media_intf_devnode *devnode) { + media_remove_intf_links(&devnode->intf); media_gobj_remove(&devnode->intf.graph_obj); kfree(devnode); } @@ -944,3 +945,25 @@ void media_remove_intf_link(struct media_link *link) mutex_unlock(&link->graph_obj.mdev->graph_mutex); } EXPORT_SYMBOL_GPL(media_remove_intf_link); + +void __media_remove_intf_links(struct media_interface *intf) +{ + struct media_link *link, *tmp; + + list_for_each_entry_safe(link, tmp, &intf->links, list) + __media_remove_intf_link(link); + +} +EXPORT_SYMBOL_GPL(__media_remove_intf_links); + +void media_remove_intf_links(struct media_interface *intf) +{ + /* Do nothing if the intf is not registered. */ + if (intf->graph_obj.mdev == NULL) + return; + + mutex_lock(&intf->graph_obj.mdev->graph_mutex); + __media_remove_intf_links(intf); + mutex_unlock(&intf->graph_obj.mdev->graph_mutex); +} +EXPORT_SYMBOL_GPL(media_remove_intf_links); diff --git a/include/media/media-entity.h b/include/media/media-entity.h index 8c344a07636c..0e7e193a6736 100644 --- a/include/media/media-entity.h +++ b/include/media/media-entity.h @@ -318,6 +318,9 @@ struct media_link *media_create_intf_link(struct media_entity *entity, struct media_interface *intf, u32 flags); void media_remove_intf_link(struct media_link *link); +void __media_remove_intf_links(struct media_interface *intf); +void media_remove_intf_links(struct media_interface *intf); + #define media_entity_call(entity, operation, args...) \ (((entity)->ops && (entity)->ops->operation) ? \
Add functions to explicitly unregister all entity links. This function is called automatically when an entity link is destroyed. Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>