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

[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
...@@ -296,7 +296,7 @@ static struct media_entity *stack_pop(struct media_entity_graph *graph) ...@@ -296,7 +296,7 @@ static struct media_entity *stack_pop(struct media_entity_graph *graph)
__must_check int media_entity_graph_walk_init( __must_check int media_entity_graph_walk_init(
struct media_entity_graph *graph, struct media_device *mdev) 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); EXPORT_SYMBOL_GPL(media_entity_graph_walk_init);
...@@ -306,20 +306,18 @@ 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) 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); 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)
{ {
media_entity_enum_zero(&graph->ent_enum);
media_entity_enum_set(&graph->ent_enum, entity);
graph->top = 0; graph->top = 0;
graph->stack[graph->top].entity = NULL; 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); stack_push(graph, entity);
} }
EXPORT_SYMBOL_GPL(media_entity_graph_walk_start); EXPORT_SYMBOL_GPL(media_entity_graph_walk_start);
...@@ -350,11 +348,9 @@ media_entity_graph_walk_next(struct media_entity_graph *graph) ...@@ -350,11 +348,9 @@ media_entity_graph_walk_next(struct media_entity_graph *graph)
/* Get the entity in the other end of the link . */ /* Get the entity in the other end of the link . */
next = media_entity_other(entity, 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? */ /* 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; link_top(graph) = link_top(graph)->next;
continue; continue;
} }
......
...@@ -103,7 +103,7 @@ struct media_entity_enum { ...@@ -103,7 +103,7 @@ struct media_entity_enum {
* @stack: Graph traversal stack; the stack contains information * @stack: Graph traversal stack; the stack contains information
* on the path the media entities to be walked and the * on the path the media entities to be walked and the
* links through which they were reached. * links through which they were reached.
* @entities: Visited entities * @ent_enum: Visited entities
* @top: The top of the stack * @top: The top of the stack
*/ */
struct media_entity_graph { struct media_entity_graph {
...@@ -112,7 +112,7 @@ struct media_entity_graph { ...@@ -112,7 +112,7 @@ struct media_entity_graph {
struct list_head *link; struct list_head *link;
} stack[MEDIA_ENTITY_ENUM_MAX_DEPTH]; } stack[MEDIA_ENTITY_ENUM_MAX_DEPTH];
DECLARE_BITMAP(entities, MEDIA_ENTITY_ENUM_MAX_ID); struct media_entity_enum ent_enum;
int top; int top;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment