mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 15:02:32 +00:00
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
|
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
|