[media] s5p-fimc: Don't use mutex_lock_interruptible() in device release()
Use uninterruptible mutex_lock in the release() file op to make sure all resources are properly freed when a process is being terminated. Returning -ERESTARTSYS has no effect for a terminating process and this caused driver resources not to be released. Not releasing the buffer queue also prevented other drivers to free memory, e.g. in MMAP -> USERPTR scenario. This patch is required for stable kernels v3.6+. Reported-by: Kamil Debski <k.debski@samsung.com> Reported-by: Marek Szyprowski <m.szyprowski@samsung.com> 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>
This commit is contained in:
parent
97d66c4727
commit
ba6b372cf0
|
@ -556,8 +556,7 @@ static int fimc_capture_close(struct file *file)
|
|||
|
||||
dbg("pid: %d, state: 0x%lx", task_pid_nr(current), fimc->state);
|
||||
|
||||
if (mutex_lock_interruptible(&fimc->lock))
|
||||
return -ERESTARTSYS;
|
||||
mutex_lock(&fimc->lock);
|
||||
|
||||
if (--fimc->vid_cap.refcnt == 0) {
|
||||
clear_bit(ST_CAPT_BUSY, &fimc->state);
|
||||
|
|
|
@ -718,8 +718,7 @@ static int fimc_m2m_release(struct file *file)
|
|||
dbg("pid: %d, state: 0x%lx, refcnt= %d",
|
||||
task_pid_nr(current), fimc->state, fimc->m2m.refcnt);
|
||||
|
||||
if (mutex_lock_interruptible(&fimc->lock))
|
||||
return -ERESTARTSYS;
|
||||
mutex_lock(&fimc->lock);
|
||||
|
||||
v4l2_m2m_ctx_release(ctx->m2m_ctx);
|
||||
fimc_ctrls_delete(ctx);
|
||||
|
|
Loading…
Reference in New Issue