Buffers can be returned back to videobuf2 in driver's streamon handler. In this case vb2_buffer_done() with buffer state VB2_BUF_STATE_QUEUED will cause the driver's buf_queue vb2 operation to be called, queueing the same buffer again only to be returned to videobuf2 using vb2_buffer_done() and so on. Instead of using q->start_streamin_called to judge whether to return the buffer to the driver immediately, use q->streaming which is set only after the driver's start_streaming() vb2 operation is called. Fixes: ce0eff016f72 ("[media] vb2: allow requeuing buffers while streaming") Signed-off-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> Cc: stable@xxxxxxxxxxxxxxx # for v4.1 --- drivers/media/v4l2-core/videobuf2-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 1a096a6..6957078 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -1208,7 +1208,7 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) spin_unlock_irqrestore(&q->done_lock, flags); if (state == VB2_BUF_STATE_QUEUED) { - if (q->start_streaming_called) + if (q->streaming) __enqueue_in_driver(vb); return; } -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html