Commit fb49f204 authored by Shuah Khan's avatar Shuah Khan Committed by Mauro Carvalho Chehab

[media] media: Media Controller non-locking __media_entity_pipeline_start/stop()

Add non-locking __media_entity_pipeline_start/stop()
interfaces to be called from code paths that hold the
graph_mutex.
Signed-off-by: default avatarShuah Khan <shuahkh@osg.samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent efc70278
...@@ -366,7 +366,7 @@ EXPORT_SYMBOL_GPL(media_entity_graph_walk_next); ...@@ -366,7 +366,7 @@ EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
* Pipeline management * Pipeline management
*/ */
__must_check int media_entity_pipeline_start(struct media_entity *entity, __must_check int __media_entity_pipeline_start(struct media_entity *entity,
struct media_pipeline *pipe) struct media_pipeline *pipe)
{ {
struct media_device *mdev = entity->graph_obj.mdev; struct media_device *mdev = entity->graph_obj.mdev;
...@@ -375,8 +375,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity, ...@@ -375,8 +375,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
struct media_link *link; struct media_link *link;
int ret; int ret;
mutex_lock(&mdev->graph_mutex);
if (!pipe->streaming_count++) { if (!pipe->streaming_count++) {
ret = media_entity_graph_walk_init(&pipe->graph, mdev); ret = media_entity_graph_walk_init(&pipe->graph, mdev);
if (ret) if (ret)
...@@ -457,8 +455,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity, ...@@ -457,8 +455,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
} }
} }
mutex_unlock(&mdev->graph_mutex);
return 0; return 0;
error: error:
...@@ -488,19 +484,28 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity, ...@@ -488,19 +484,28 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
if (!--pipe->streaming_count) if (!--pipe->streaming_count)
media_entity_graph_walk_cleanup(graph); media_entity_graph_walk_cleanup(graph);
mutex_unlock(&mdev->graph_mutex); return ret;
}
EXPORT_SYMBOL_GPL(__media_entity_pipeline_start);
__must_check int media_entity_pipeline_start(struct media_entity *entity,
struct media_pipeline *pipe)
{
struct media_device *mdev = entity->graph_obj.mdev;
int ret;
mutex_lock(&mdev->graph_mutex);
ret = __media_entity_pipeline_start(entity, pipe);
mutex_unlock(&mdev->graph_mutex);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(media_entity_pipeline_start); EXPORT_SYMBOL_GPL(media_entity_pipeline_start);
void media_entity_pipeline_stop(struct media_entity *entity) void __media_entity_pipeline_stop(struct media_entity *entity)
{ {
struct media_device *mdev = entity->graph_obj.mdev;
struct media_entity_graph *graph = &entity->pipe->graph; struct media_entity_graph *graph = &entity->pipe->graph;
struct media_pipeline *pipe = entity->pipe; struct media_pipeline *pipe = entity->pipe;
mutex_lock(&mdev->graph_mutex);
WARN_ON(!pipe->streaming_count); WARN_ON(!pipe->streaming_count);
media_entity_graph_walk_start(graph, entity); media_entity_graph_walk_start(graph, entity);
...@@ -517,6 +522,15 @@ void media_entity_pipeline_stop(struct media_entity *entity) ...@@ -517,6 +522,15 @@ void media_entity_pipeline_stop(struct media_entity *entity)
if (!--pipe->streaming_count) if (!--pipe->streaming_count)
media_entity_graph_walk_cleanup(graph); media_entity_graph_walk_cleanup(graph);
}
EXPORT_SYMBOL_GPL(__media_entity_pipeline_stop);
void media_entity_pipeline_stop(struct media_entity *entity)
{
struct media_device *mdev = entity->graph_obj.mdev;
mutex_lock(&mdev->graph_mutex);
__media_entity_pipeline_stop(entity);
mutex_unlock(&mdev->graph_mutex); mutex_unlock(&mdev->graph_mutex);
} }
EXPORT_SYMBOL_GPL(media_entity_pipeline_stop); EXPORT_SYMBOL_GPL(media_entity_pipeline_stop);
......
...@@ -832,6 +832,16 @@ media_entity_graph_walk_next(struct media_entity_graph *graph); ...@@ -832,6 +832,16 @@ media_entity_graph_walk_next(struct media_entity_graph *graph);
*/ */
__must_check int media_entity_pipeline_start(struct media_entity *entity, __must_check int media_entity_pipeline_start(struct media_entity *entity,
struct media_pipeline *pipe); struct media_pipeline *pipe);
/**
* __media_entity_pipeline_start - Mark a pipeline as streaming
*
* @entity: Starting entity
* @pipe: Media pipeline to be assigned to all entities in the pipeline.
*
* Note: This is the non-locking version of media_entity_pipeline_start()
*/
__must_check int __media_entity_pipeline_start(struct media_entity *entity,
struct media_pipeline *pipe);
/** /**
* media_entity_pipeline_stop - Mark a pipeline as not streaming * media_entity_pipeline_stop - Mark a pipeline as not streaming
...@@ -847,6 +857,15 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity, ...@@ -847,6 +857,15 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
*/ */
void media_entity_pipeline_stop(struct media_entity *entity); void media_entity_pipeline_stop(struct media_entity *entity);
/**
* __media_entity_pipeline_stop - Mark a pipeline as not streaming
*
* @entity: Starting entity
*
* Note: This is the non-locking version of media_entity_pipeline_stop()
*/
void __media_entity_pipeline_stop(struct media_entity *entity);
/** /**
* media_devnode_create() - creates and initializes a device node interface * media_devnode_create() - creates and initializes a device node interface
* *
......
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