aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch')
-rw-r--r--target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch55
1 files changed, 55 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch b/target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch
new file mode 100644
index 0000000000..dccb2d3ce1
--- /dev/null
+++ b/target/linux/brcm2708/patches-4.19/950-0689-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch
@@ -0,0 +1,55 @@
+From 3d7a2ee97e3f1eaffe5f3f9e38c26506feac245b Mon Sep 17 00:00:00 2001
+From: Dave Stevenson <dave.stevenson@raspberrypi.org>
+Date: Fri, 28 Jun 2019 11:30:49 +0100
+Subject: [PATCH 689/782] Revert "media: vb2: Allow reqbufs(0) with "in use"
+ MMAP buffers"
+
+This reverts commit a2c73e18c1f657de6d654f51effa0a94863abbd8.
+An alternative version was accepted upstream. Revert this patch to
+apply that one.
+
+Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
+---
+ .../media/common/videobuf2/videobuf2-core.c | 23 +++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+--- a/drivers/media/common/videobuf2/videobuf2-core.c
++++ b/drivers/media/common/videobuf2/videobuf2-core.c
+@@ -554,6 +554,20 @@ bool vb2_buffer_in_use(struct vb2_queue
+ }
+ EXPORT_SYMBOL(vb2_buffer_in_use);
+
++/*
++ * __buffers_in_use() - return true if any buffers on the queue are in use and
++ * the queue cannot be freed (by the means of REQBUFS(0)) call
++ */
++static bool __buffers_in_use(struct vb2_queue *q)
++{
++ unsigned int buffer;
++ for (buffer = 0; buffer < q->num_buffers; ++buffer) {
++ if (vb2_buffer_in_use(q, q->bufs[buffer]))
++ return true;
++ }
++ return false;
++}
++
+ void vb2_core_querybuf(struct vb2_queue *q, unsigned int index, void *pb)
+ {
+ call_void_bufop(q, fill_user_buffer, q->bufs[index], pb);
+@@ -665,7 +679,16 @@ int vb2_core_reqbufs(struct vb2_queue *q
+
+ if (*count == 0 || q->num_buffers != 0 ||
+ (q->memory != VB2_MEMORY_UNKNOWN && q->memory != memory)) {
++ /*
++ * We already have buffers allocated, so first check if they
++ * are not in use and can be freed.
++ */
+ mutex_lock(&q->mmap_lock);
++ if (q->memory == VB2_MEMORY_MMAP && __buffers_in_use(q)) {
++ mutex_unlock(&q->mmap_lock);
++ dprintk(1, "memory in use, cannot free\n");
++ return -EBUSY;
++ }
+
+ /*
+ * Call queue_cancel to clean up any buffers in the PREPARED or