Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e03d2203 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 5dd8775d
Loading
Loading
Loading
Loading
+27 −0
Original line number Diff line number Diff line
@@ -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 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,
				   struct media_entity *entity)
{
+12 −5
Original line number Diff line number Diff line
@@ -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);

__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
 *
@@ -715,10 +719,13 @@ void media_entity_put(struct media_entity *entity);
 * @graph: Media graph structure that will be used to walk the graph
 * @entity: Starting entity
 *
 * This function initializes the graph traversal structure to walk the entities
 * graph starting at the given entity. The traversal structure must not be
 * modified by the caller during graph traversal. When done the structure can
 * safely be freed.
 * Before using this function, media_entity_graph_walk_init() must be
 * used to allocate resources used for walking the graph. This
 * function initializes the graph traversal structure to walk the
 * 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,
				   struct media_entity *entity);