summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJayakrishnan Memana <jayakrishnan.memana@maxim-ic.com>2012-07-15 17:54:03 +0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-08-11 19:58:16 +0400
commit8a3f0ede2b3f5477122060af1a816c6bbf09fcd2 (patch)
tree871ab8043783f69b5149895621dc88361af3e734
parent8762541f067d371320731510669e27f5cc40af38 (diff)
downloadlinux-8a3f0ede2b3f5477122060af1a816c6bbf09fcd2.tar.xz
[media] uvcvideo: Reset the bytesused field when recycling an erroneous buffer
Buffers marked as erroneous are recycled immediately by the driver if the nodrop module parameter isn't set. The buffer payload size is reset to 0, but the buffer bytesused field isn't. This results in the buffer being immediately considered as complete, leading to an infinite loop in interrupt context. Fix the problem by resetting the bytesused field when recycling the buffer. Cc: <stable@vger.kernel.org> Signed-off-by: Jayakrishnan Memana <jayakrishnan.memana@maxim-ic.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/uvc/uvc_queue.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/media/video/uvc/uvc_queue.c b/drivers/media/video/uvc/uvc_queue.c
index 9288fbd5001b..5577381b5bf0 100644
--- a/drivers/media/video/uvc/uvc_queue.c
+++ b/drivers/media/video/uvc/uvc_queue.c
@@ -338,6 +338,7 @@ struct uvc_buffer *uvc_queue_next_buffer(struct uvc_video_queue *queue,
if ((queue->flags & UVC_QUEUE_DROP_CORRUPTED) && buf->error) {
buf->error = 0;
buf->state = UVC_BUF_STATE_QUEUED;
+ buf->bytesused = 0;
vb2_set_plane_payload(&buf->buf, 0, 0);
return buf;
}