[media] media: Amend media graph walk API by init and cleanup functions

Add media_entity_graph_walk_init() and media_entity_graph_walk_cleanup()
functions in order to dynamically allocate memory for the graph. This is
not done in media_entity_graph_walk_start() as there are situations where
e.g. correct error handling, that itself may not fail, requires successful
graph walk.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
Sakari Ailus 2015-12-16 11:32:22 -02:00 committed by Mauro Carvalho Chehab
parent 5dd8775dc6
commit e03d220336
2 changed files with 39 additions and 5 deletions

View File

@ -282,6 +282,33 @@ static struct media_entity *stack_pop(struct media_entity_graph *graph)
#define link_top(en) ((en)->stack[(en)->top].link) #define link_top(en) ((en)->stack[(en)->top].link)
#define stack_top(en) ((en)->stack[(en)->top].entity) #define stack_top(en) ((en)->stack[(en)->top].entity)
/**
* media_entity_graph_walk_init - Allocate resources for graph walk
* @graph: Media graph structure that will be used to walk the graph
* @mdev: Media device
*
* Reserve resources for graph walk in media device's current
* state. The memory must be released using
* media_entity_graph_walk_free().
*
* Returns error on failure, zero on success.
*/
__must_check int media_entity_graph_walk_init(
struct media_entity_graph *graph, struct media_device *mdev)
{
return 0;
}
EXPORT_SYMBOL_GPL(media_entity_graph_walk_init);
/**
* media_entity_graph_walk_cleanup - Release resources related to graph walking
* @graph: Media graph structure that was used to walk the graph
*/
void media_entity_graph_walk_cleanup(struct media_entity_graph *graph)
{
}
EXPORT_SYMBOL_GPL(media_entity_graph_walk_cleanup);
void media_entity_graph_walk_start(struct media_entity_graph *graph, void media_entity_graph_walk_start(struct media_entity_graph *graph,
struct media_entity *entity) struct media_entity *entity)
{ {

View File

@ -699,6 +699,10 @@ struct media_pad *media_entity_remote_pad(struct media_pad *pad);
*/ */
struct media_entity *media_entity_get(struct media_entity *entity); struct media_entity *media_entity_get(struct media_entity *entity);
__must_check int media_entity_graph_walk_init(
struct media_entity_graph *graph, struct media_device *mdev);
void media_entity_graph_walk_cleanup(struct media_entity_graph *graph);
/** /**
* media_entity_put - Release the reference to the parent module * media_entity_put - Release the reference to the parent module
* *
@ -715,13 +719,16 @@ void media_entity_put(struct media_entity *entity);
* @graph: Media graph structure that will be used to walk the graph * @graph: Media graph structure that will be used to walk the graph
* @entity: Starting entity * @entity: Starting entity
* *
* This function initializes the graph traversal structure to walk the entities * Before using this function, media_entity_graph_walk_init() must be
* graph starting at the given entity. The traversal structure must not be * used to allocate resources used for walking the graph. This
* modified by the caller during graph traversal. When done the structure can * function initializes the graph traversal structure to walk the
* safely be freed. * entities graph starting at the given entity. The traversal
* structure must not be modified by the caller during graph
* traversal. After the graph walk, the resources must be released
* using media_entity_graph_walk_cleanup().
*/ */
void media_entity_graph_walk_start(struct media_entity_graph *graph, void media_entity_graph_walk_start(struct media_entity_graph *graph,
struct media_entity *entity); struct media_entity *entity);
/** /**
* media_entity_graph_walk_next - Get the next entity in the graph * media_entity_graph_walk_next - Get the next entity in the graph