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

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

[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
Loading
Loading
Loading
Loading
+24 −10
Original line number Diff line number Diff line
@@ -366,7 +366,7 @@ EXPORT_SYMBOL_GPL(media_entity_graph_walk_next);
 * 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_device *mdev = entity->graph_obj.mdev;
@@ -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);
+19 −0
Original line number Diff line number Diff line
@@ -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
 *