Commit c5036d61e0bed3f4f51391a145638b426825e69c ("media: au0828: drop vbi_buffer_filled() and re-use buffer_filled()") broke video and vbi streaming. The vb2_buffer struct was copied instead of taking a pointer to it, but vb2_buffer_done() needs the real object, not a copy, since it is hooking the buffer into a different list. Signed-off-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> Tested-by: Hans Verkuil <hans.verkuil@xxxxxxxxx> diff --git a/drivers/media/usb/au0828/au0828-video.c b/drivers/media/usb/au0828/au0828-video.c index bf990a9..1a362a0 100644 --- a/drivers/media/usb/au0828/au0828-video.c +++ b/drivers/media/usb/au0828/au0828-video.c @@ -302,20 +302,20 @@ static inline void buffer_filled(struct au0828_dev *dev, struct au0828_dmaqueue *dma_q, struct au0828_buffer *buf) { - struct vb2_buffer vb = buf->vb; - struct vb2_queue *q = vb.vb2_queue; + struct vb2_buffer *vb = &buf->vb; + struct vb2_queue *q = vb->vb2_queue; /* Advice that buffer was filled */ au0828_isocdbg("[%p/%d] wakeup\n", buf, buf->top_field); if (q->type == V4L2_BUF_TYPE_VIDEO_CAPTURE) - vb.v4l2_buf.sequence = dev->frame_count++; + vb->v4l2_buf.sequence = dev->frame_count++; else - vb.v4l2_buf.sequence = dev->vbi_frame_count++; + vb->v4l2_buf.sequence = dev->vbi_frame_count++; - vb.v4l2_buf.field = V4L2_FIELD_INTERLACED; - v4l2_get_timestamp(&vb.v4l2_buf.timestamp); - vb2_buffer_done(&vb, VB2_BUF_STATE_DONE); + vb->v4l2_buf.field = V4L2_FIELD_INTERLACED; + v4l2_get_timestamp(&vb->v4l2_buf.timestamp); + vb2_buffer_done(vb, VB2_BUF_STATE_DONE); } /* -- 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