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

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

[media] media: Use entity enums in graph walk



This will also mean that the necessary graph related data structures will
be allocated dynamically, removing the need for maximum ID checks.

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent c1a5f1bc
Loading
Loading
Loading
Loading
+6 −10
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ static struct media_entity *stack_pop(struct media_entity_graph *graph)
__must_check int media_entity_graph_walk_init(
	struct media_entity_graph *graph, struct media_device *mdev)
{
	return 0;
	return media_entity_enum_init(&graph->ent_enum, mdev);
}
EXPORT_SYMBOL_GPL(media_entity_graph_walk_init);

@@ -306,20 +306,18 @@ EXPORT_SYMBOL_GPL(media_entity_graph_walk_init);
 */
void media_entity_graph_walk_cleanup(struct media_entity_graph *graph)
{
	media_entity_enum_cleanup(&graph->ent_enum);
}
EXPORT_SYMBOL_GPL(media_entity_graph_walk_cleanup);

void media_entity_graph_walk_start(struct media_entity_graph *graph,
				   struct media_entity *entity)
{
	media_entity_enum_zero(&graph->ent_enum);
	media_entity_enum_set(&graph->ent_enum, entity);

	graph->top = 0;
	graph->stack[graph->top].entity = NULL;
	bitmap_zero(graph->entities, MEDIA_ENTITY_ENUM_MAX_ID);

	if (WARN_ON(media_entity_id(entity) >= MEDIA_ENTITY_ENUM_MAX_ID))
		return;

	__set_bit(media_entity_id(entity), graph->entities);
	stack_push(graph, entity);
}
EXPORT_SYMBOL_GPL(media_entity_graph_walk_start);
@@ -350,11 +348,9 @@ media_entity_graph_walk_next(struct media_entity_graph *graph)

		/* Get the entity in the other end of the link . */
		next = media_entity_other(entity, link);
		if (WARN_ON(media_entity_id(next) >= MEDIA_ENTITY_ENUM_MAX_ID))
			return NULL;

		/* Has the entity already been visited? */
		if (__test_and_set_bit(media_entity_id(next), graph->entities)) {
		if (media_entity_enum_test_and_set(&graph->ent_enum, next)) {
			link_top(graph) = link_top(graph)->next;
			continue;
		}
+2 −2
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ struct media_entity_enum {
 * @stack:		Graph traversal stack; the stack contains information
 *			on the path the media entities to be walked and the
 *			links through which they were reached.
 * @entities:		Visited entities
 * @ent_enum:		Visited entities
 * @top:		The top of the stack
 */
struct media_entity_graph {
@@ -112,7 +112,7 @@ struct media_entity_graph {
		struct list_head *link;
	} stack[MEDIA_ENTITY_ENUM_MAX_DEPTH];

	DECLARE_BITMAP(entities, MEDIA_ENTITY_ENUM_MAX_ID);
	struct media_entity_enum ent_enum;
	int top;
};