summaryrefslogtreecommitdiffstats
path: root/drivers/media/media-entity.c
diff options
context:
space:
mode:
authorShuah Khan <shuahkh@osg.samsung.com>2016-01-30 18:10:52 -0200
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>2016-02-01 13:32:50 -0200
commit3801bc7d1b8dd70d47a92e58d6fb5653c10b7c95 (patch)
tree8c4bc1224dd147a9e827dbd2e07027914242e72f /drivers/media/media-entity.c
parentd40ec6fdb0b03b7be4c7923a3da0e46bf943740a (diff)
downloadlinux-3801bc7d1b8dd70d47a92e58d6fb5653c10b7c95.tar.gz
linux-3801bc7d1b8dd70d47a92e58d6fb5653c10b7c95.tar.bz2
linux-3801bc7d1b8dd70d47a92e58d6fb5653c10b7c95.zip
[media] media: Media Controller fix to not let stream_count go negative
Change media_entity_pipeline_stop() to not decrement stream_count of an inactive media pipeline. Doing so, results in preventing starting the pipeline. Signed-off-by: Shuah Khan <shuahkh@osg.samsung.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Diffstat (limited to 'drivers/media/media-entity.c')
-rw-r--r--drivers/media/media-entity.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/drivers/media/media-entity.c b/drivers/media/media-entity.c
index e89d85a7d31b..f2e43603d6d2 100644
--- a/drivers/media/media-entity.c
+++ b/drivers/media/media-entity.c
@@ -452,9 +452,12 @@ error:
media_entity_graph_walk_start(graph, entity_err);
while ((entity_err = media_entity_graph_walk_next(graph))) {
- entity_err->stream_count--;
- if (entity_err->stream_count == 0)
- entity_err->pipe = NULL;
+ /* don't let the stream_count go negative */
+ if (entity->stream_count > 0) {
+ entity_err->stream_count--;
+ if (entity_err->stream_count == 0)
+ entity_err->pipe = NULL;
+ }
/*
* We haven't increased stream_count further than this
@@ -486,9 +489,12 @@ void media_entity_pipeline_stop(struct media_entity *entity)
media_entity_graph_walk_start(graph, entity);
while ((entity = media_entity_graph_walk_next(graph))) {
- entity->stream_count--;
- if (entity->stream_count == 0)
- entity->pipe = NULL;
+ /* don't let the stream_count go negative */
+ if (entity->stream_count > 0) {
+ entity->stream_count--;
+ if (entity->stream_count == 0)
+ entity->pipe = NULL;
+ }
}
if (!--pipe->streaming_count)