Patch "media: videobuf2: request more buffers for vb2_read" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    media: videobuf2: request more buffers for vb2_read

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     media-videobuf2-request-more-buffers-for-vb2_read.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 1f59c21221f1172c99b27c1d63cade05cf143520
Author: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
Date:   Thu Nov 30 13:58:12 2023 +0100

    media: videobuf2: request more buffers for vb2_read
    
    [ Upstream commit 350ab13e1382f2afcc2285041a1e75b80d771c2c ]
    
    The vb2 read support requests 1 buffer, leaving it to the driver
    to increase this number to something that works.
    
    Unfortunately, drivers do not deal with this reliably, and in fact
    this caused problems for the bttv driver and reading from /dev/vbiX,
    causing every other VBI frame to be all 0.
    
    Instead, request as the number of buffers whatever is the maximum of
    2 and q->min_buffers_needed+1.
    
    In order to start streaming you need at least q->min_buffers_needed
    queued buffers, so add 1 buffer for processing. And if that field
    is 0, then choose 2 (again, one buffer is being filled while the
    other one is being processed).
    
    This certainly makes more sense than requesting just 1 buffer, and
    the VBI bttv support is now working again.
    
    It turns out that the old videobuf1 behavior of bttv was to allocate
    8 (video) and 4 (vbi) buffers when used with read(). After the vb2
    conversion that changed to 2 for both. With this patch it is 3, which
    is really all you need.
    
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xxxxxxxxx>
    Fixes: b7ec3212a73a ("media: bttv: convert to vb2")
    Tested-by: Dr. David Alan Gilbert <dave@xxxxxxxxxxx>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
index 27aee92f3eea..19f80ff497b7 100644
--- a/drivers/media/common/videobuf2/videobuf2-core.c
+++ b/drivers/media/common/videobuf2/videobuf2-core.c
@@ -2648,9 +2648,14 @@ static int __vb2_init_fileio(struct vb2_queue *q, int read)
 		return -EBUSY;
 
 	/*
-	 * Start with count 1, driver can increase it in queue_setup()
+	 * Start with q->min_buffers_needed + 1, driver can increase it in
+	 * queue_setup()
+	 *
+	 * 'min_buffers_needed' buffers need to be queued up before you
+	 * can start streaming, plus 1 for userspace (or in this case,
+	 * kernelspace) processing.
 	 */
-	count = 1;
+	count = max(2, q->min_buffers_needed + 1);
 
 	dprintk(q, 3, "setting up file io: mode %s, count %d, read_once %d, write_immediately %d\n",
 		(read) ? "read" : "write", count, q->fileio_read_once,




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux