From 4318ff8e62940b32c42d574af304d6e5fd0b422c Mon Sep 17 00:00:00 2001 From: Shunqian Zheng Date: Fri, 23 Aug 2019 03:15:50 +0000 Subject: [PATCH] media: rockchip: rkisp1: cleanup buffers if start stream failed This fix the warning: [ 109.292738] WARNING: at drivers/media/v4l2-core/videobuf2-core.c:1313 if start streaming failed. Change-Id: Ieaff518836382121d0c79c86c57e90a8e6b97296 Signed-off-by: Shunqian Zheng --- drivers/media/platform/rockchip/isp1/capture.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/rockchip/isp1/capture.c b/drivers/media/platform/rockchip/isp1/capture.c index 27c0c594cfec..5707a0a31e27 100644 --- a/drivers/media/platform/rockchip/isp1/capture.c +++ b/drivers/media/platform/rockchip/isp1/capture.c @@ -1499,6 +1499,7 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count) struct rkisp1_device *dev = stream->ispdev; struct v4l2_device *v4l2_dev = &dev->v4l2_dev; int ret; + unsigned int i; if (WARN_ON(stream->streaming)) return -EBUSY; @@ -1510,7 +1511,7 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count) v4l2_err(v4l2_dev, "update sensor info failed %d\n", ret); - return ret; + goto buffer_done; } } @@ -1520,7 +1521,8 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count) if (stream->id != RKISP1_STREAM_SP) { v4l2_err(v4l2_dev, "only selfpath support interlaced\n"); - return -EINVAL; + ret = -EINVAL; + goto buffer_done; } stream->interlaced = true; stream->u.sp.field = RKISP_FIELD_INVAL; @@ -1529,7 +1531,7 @@ rkisp1_start_streaming(struct vb2_queue *queue, unsigned int count) ret = rkisp1_create_dummy_buf(stream); if (ret < 0) - return ret; + goto buffer_done; /* enable clocks/power-domains */ ret = dev->pipe.open(&dev->pipe, &node->vdev.entity, true); @@ -1566,6 +1568,14 @@ close_pipe: dev->pipe.close(&dev->pipe); destroy_dummy_buf: rkisp1_destroy_dummy_buf(stream); +buffer_done: + for (i = 0; i < queue->num_buffers; ++i) { + struct vb2_buffer *vb; + + vb = queue->bufs[i]; + if (vb->state == VB2_BUF_STATE_ACTIVE) + vb2_buffer_done(vb, VB2_BUF_STATE_QUEUED); + } return ret; }