mirror of https://gitee.com/openkylin/linux.git
[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: Shuah Khan <shuahkh@osg.samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
This commit is contained in:
parent
efc702784f
commit
fb49f20438
|
@ -366,8 +366,8 @@ EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
|
|||
* Pipeline management
|
||||
*/
|
||||
|
||||
__must_check int media_entity_pipeline_start(struct media_entity *entity,
|
||||
struct media_pipeline *pipe)
|
||||
__must_check int __media_entity_pipeline_start(struct media_entity *entity,
|
||||
struct media_pipeline *pipe)
|
||||
{
|
||||
struct media_device *mdev = entity->graph_obj.mdev;
|
||||
struct media_entity_graph *graph = &pipe->graph;
|
||||
|
@ -375,8 +375,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
|
|||
struct media_link *link;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&mdev->graph_mutex);
|
||||
|
||||
if (!pipe->streaming_count++) {
|
||||
ret = media_entity_graph_walk_init(&pipe->graph, mdev);
|
||||
if (ret)
|
||||
|
@ -457,8 +455,6 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
|
|||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&mdev->graph_mutex);
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
@ -488,19 +484,28 @@ __must_check int media_entity_pipeline_start(struct media_entity *entity,
|
|||
if (!--pipe->streaming_count)
|
||||
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;
|
||||
}
|
||||
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_pipeline *pipe = entity->pipe;
|
||||
|
||||
mutex_lock(&mdev->graph_mutex);
|
||||
|
||||
WARN_ON(!pipe->streaming_count);
|
||||
media_entity_graph_walk_start(graph, entity);
|
||||
|
@ -517,6 +522,15 @@ void media_entity_pipeline_stop(struct media_entity *entity)
|
|||
if (!--pipe->streaming_count)
|
||||
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);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(media_entity_pipeline_stop);
|
||||
|
|
|
@ -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,
|
||||
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
|
||||
|
@ -847,6 +857,15 @@ __must_check int media_entity_pipeline_start(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
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue