diff options
Diffstat (limited to 'target/linux/brcm2708/patches-4.19/950-0696-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.19/950-0696-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.19/950-0696-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch b/target/linux/brcm2708/patches-4.19/950-0696-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch new file mode 100644 index 0000000000..5bc0e98c84 --- /dev/null +++ b/target/linux/brcm2708/patches-4.19/950-0696-Revert-media-vb2-Allow-reqbufs-0-with-in-use-MMAP-bu.patch @@ -0,0 +1,55 @@ +From 41079f8602ae082b78e33e7d326ff5f57b7d76e8 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 696/703] 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 +@@ -550,6 +550,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); +@@ -661,7 +675,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 |