From: Sylwester Nawrocki Date: Fri, 20 Apr 2018 10:32:08 +0000 (+0200) Subject: fimc-is: Release all buffers in sensor video node stop_streaming() callback X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=89e1911d69346ea4b31ffca4501aa4a90fa2677e;p=platform%2Fkernel%2Flinux-exynos.git fimc-is: Release all buffers in sensor video node stop_streaming() callback Any buffer owned by a driver should be released in videobuf2 stop_streaming() callback. This change allows to avoid warnings from videobuf2 when closing video device nodes. Change-Id: Ib7f8b0b8fffe50f387827929829e3e87c0f1bf38 Signed-off-by: Sylwester Nawrocki --- diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c index e474c49de24f..c46a38e176c0 100644 --- a/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c +++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video-sensor.c @@ -793,10 +793,10 @@ static int fimc_is_sen_start_streaming(struct vb2_queue *q, static void fimc_is_sen_stop_streaming(struct vb2_queue *q) { - int ret = 0; struct fimc_is_video_ctx *vctx = q->drv_priv; struct fimc_is_queue *queue; struct fimc_is_device_sensor *device; + int i; BUG_ON(!vctx); @@ -809,10 +809,20 @@ static void fimc_is_sen_stop_streaming(struct vb2_queue *q) clear_bit(FIMC_IS_QUEUE_STREAM_ON, &queue->state); clear_bit(FIMC_IS_QUEUE_BUFFER_READY, &queue->state); clear_bit(FIMC_IS_QUEUE_BUFFER_PREPARED, &queue->state); - ret = fimc_is_sensor_back_stop(device); + + fimc_is_sensor_back_stop(device); } else { err("already stream off"); } + + /* + * Any buffers still owned by the driver will be released with the + * VB2_BUF_STATE_ERROR flag set. + */ + for (i = 0; i < q->num_buffers; i++) { + if (q->bufs[i]->state == VB2_BUF_STATE_ACTIVE) + vb2_buffer_done(q->bufs[i], VB2_BUF_STATE_ERROR); + } } static void fimc_is_sen_buffer_queue(struct vb2_buffer *vb)