This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/media_tree.git tree:

Subject: [media] media: Media Controller non-locking 
__media_entity_pipeline_start/stop()
Author:  Shuah Khan <[email protected]>
Date:    Thu Feb 11 21:41:24 2016 -0200

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 <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 drivers/media/media-entity.c | 34 ++++++++++++++++++++++++----------
 include/media/media-entity.h | 19 +++++++++++++++++++
 2 files changed, 43 insertions(+), 10 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/media_tree.git/commit/?id=fb49f20438f361a60f9af555e5a69d91bb5e358f
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
index bab592c6e785..bcd7464ab765 100644
--- a/drivers/media/media-entity.c
+++ b/drivers/media/media-entity.c
@@ -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 @@ error_graph_walk_start:
        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);
diff --git a/include/media/media-entity.h b/include/media/media-entity.h
index fe485d367985..d58e29d3f239 100644
--- a/include/media/media-entity.h
+++ b/include/media/media-entity.h
@@ -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
@@ -848,6 +858,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
  *
  * @mdev:      pointer to struct &media_device

_______________________________________________
linuxtv-commits mailing list
[email protected]
http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to