From 6237e7b62dd1b40b96ec7ce753b3cd9c7fc91ebb Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki Date: Thu, 19 Apr 2018 13:58:43 +0200 Subject: [PATCH] fimc-is: Release all buffers in fimc_is_queue_stop_streaming() Any buffer owned by the driver should be released in videobuf2 stop_streaming() callback. This change allows to avoid warnings from videobuf2 when closing video device nodes. Change-Id: Idd2f3157ab5c0326c39e8d9160514ad6102301b6 Signed-off-by: Sylwester Nawrocki --- .../media/platform/exynos/fimc-is/fimc-is-video.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/exynos/fimc-is/fimc-is-video.c b/drivers/media/platform/exynos/fimc-is/fimc-is-video.c index 885841bc7cc9..4a4956cf5075 100644 --- a/drivers/media/platform/exynos/fimc-is/fimc-is-video.c +++ b/drivers/media/platform/exynos/fimc-is/fimc-is-video.c @@ -733,7 +733,8 @@ int fimc_is_queue_stop_streaming(struct fimc_is_queue *queue, struct fimc_is_subdev *subdev, struct fimc_is_video_ctx *vctx) { - int ret = 0; + struct vb2_queue *vbq = queue->vbq; + int ret, i; BUG_ON(!queue); BUG_ON(!device); @@ -759,6 +760,15 @@ p_err: clear_bit(FIMC_IS_QUEUE_BUFFER_READY, &queue->state); clear_bit(FIMC_IS_QUEUE_BUFFER_PREPARED, &queue->state); + /* + * Any buffers still owned by the driver will be released with the + * VB2_BUF_STATE_ERROR flag set. + */ + for (i = 0; i < vbq->num_buffers; i++) { + if (vbq->bufs[i]->state == VB2_BUF_STATE_ACTIVE) + vb2_buffer_done(vbq->bufs[i], VB2_BUF_STATE_ERROR); + } + return ret; } -- 2.34.1