Skip to content

Commit

Permalink
[media] s5p-fimc: Fix bug in capture node open()
Browse files Browse the repository at this point in the history
When video pipeline initialization fails, the ST_CAPT_BUSY flag
needs to be cleared before pm_runtime_put_sync is called.
Otherwise the runtime suspend routine tries to suspend device,
rather than just turning it off. Also fix potential null pointer
dereference in fimc_pipeline_shutdown().

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Sylwester Nawrocki authored and Mauro Carvalho Chehab committed Jun 25, 2012
1 parent b6a509d commit 90e614b
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
2 changes: 1 addition & 1 deletion drivers/media/video/s5p-fimc/fimc-capture.c
Original file line number Diff line number Diff line change
Expand Up @@ -499,10 +499,10 @@ static int fimc_capture_open(struct file *file)
if (ret < 0) {
dev_err(&fimc->pdev->dev,
"Video pipeline initialization failed\n");
clear_bit(ST_CAPT_BUSY, &fimc->state);
pm_runtime_put_sync(&fimc->pdev->dev);
fimc->vid_cap.refcnt--;
v4l2_fh_release(file);
clear_bit(ST_CAPT_BUSY, &fimc->state);
return ret;
}
ret = fimc_capture_ctrls_create(fimc);
Expand Down
6 changes: 5 additions & 1 deletion drivers/media/video/s5p-fimc/fimc-mdevice.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,9 +193,13 @@ int __fimc_pipeline_shutdown(struct fimc_pipeline *p)

int fimc_pipeline_shutdown(struct fimc_pipeline *p)
{
struct media_entity *me = &p->subdevs[IDX_SENSOR]->entity;
struct media_entity *me;
int ret;

if (!p || !p->subdevs[IDX_SENSOR])
return -EINVAL;

me = &p->subdevs[IDX_SENSOR]->entity;
mutex_lock(&me->parent->graph_mutex);
ret = __fimc_pipeline_shutdown(p);
mutex_unlock(&me->parent->graph_mutex);
Expand Down

0 comments on commit 90e614b

Please sign in to comment.