aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/media
diff options
context:
space:
mode:
authorGravatar Dafna Hirschfeld <dafna.hirschfeld@collabora.com> 2020-07-14 14:38:29 +0200
committerGravatar Mauro Carvalho Chehab <mchehab+huawei@kernel.org> 2020-07-19 14:04:14 +0200
commitaa86e0bbf2ee3fe338798af78f02b5e6088b50c1 (patch)
treebf208671e4ffa8e4335c6ad6642c24f9550da29e /drivers/staging/media
parentmedia: MAINTAINERS: rectify CHRONTEL CH7322 CEC DRIVER section (diff)
downloadlinux-aa86e0bbf2ee3fe338798af78f02b5e6088b50c1.tar.gz
linux-aa86e0bbf2ee3fe338798af78f02b5e6088b50c1.tar.bz2
linux-aa86e0bbf2ee3fe338798af78f02b5e6088b50c1.zip
media: staging: rkisp1: cap: don't set next buffer from rkisp1_vb2_buf_queue
The function 'rkisp1_vb2_buf_queue' sets the next buffer directly in case the capture is already streaming but no frame yet arrived from the sensor. This is an optimization that tries to avoid dropping a frame. The call atomic_read(&cap->rkisp1->isp.frame_sequence) is used to check if a frame arrived. Reading the 'frame_sequence' should be avoided outside irq handlers to avoid race conditions. This patch removes this optimization. Dropping of the first frames can be avoided if userspace queues the buffers before start streaming. If userspace starts queueing buffers only after calling 'streamon' he risks frame drops anyway. Signed-off-by: Dafna Hirschfeld <dafna.hirschfeld@collabora.com> Acked-by: Helen Koike <helen.koike@collabora.com> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
Diffstat (limited to 'drivers/staging/media')
-rw-r--r--drivers/staging/media/rkisp1/rkisp1-capture.c13
1 files changed, 1 insertions, 12 deletions
diff --git a/drivers/staging/media/rkisp1/rkisp1-capture.c b/drivers/staging/media/rkisp1/rkisp1-capture.c
index 793ec884c894..572b0949c81f 100644
--- a/drivers/staging/media/rkisp1/rkisp1-capture.c
+++ b/drivers/staging/media/rkisp1/rkisp1-capture.c
@@ -743,18 +743,7 @@ static void rkisp1_vb2_buf_queue(struct vb2_buffer *vb)
ispbuf->buff_addr[RKISP1_PLANE_CB]);
spin_lock_irqsave(&cap->buf.lock, flags);
-
- /*
- * If there's no next buffer assigned, queue this buffer directly
- * as the next buffer, and update the memory interface.
- */
- if (cap->is_streaming && !cap->buf.next &&
- atomic_read(&cap->rkisp1->isp.frame_sequence) == -1) {
- cap->buf.next = ispbuf;
- rkisp1_set_next_buf(cap);
- } else {
- list_add_tail(&ispbuf->queue, &cap->buf.queue);
- }
+ list_add_tail(&ispbuf->queue, &cap->buf.queue);
spin_unlock_irqrestore(&cap->buf.lock, flags);
}