All of lore.kernel.org
 help / color / mirror / Atom feed
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: mchehab@kernel.org, tfiga@chromium.org, m.szyprowski@samsung.com,
	ming.qian@nxp.com, ezequiel@vanguardiasur.com.ar,
	p.zabel@pengutronix.de, gregkh@linuxfoundation.org,
	hverkuil-cisco@xs4all.nl, nicolas.dufresne@collabora.com
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-rockchip@lists.infradead.org,
	linux-staging@lists.linux.dev, kernel@collabora.com,
	Benjamin Gaignard <benjamin.gaignard@collabora.com>
Subject: [PATCH v13 02/56] media: videobuf2: Rework offset 'cookie' encoding pattern
Date: Thu, 19 Oct 2023 14:51:28 +0200	[thread overview]
Message-ID: <20231019125222.21370-3-benjamin.gaignard@collabora.com> (raw)
In-Reply-To: <20231019125222.21370-1-benjamin.gaignard@collabora.com>

Change how offset 'cookie' field value is computed to make possible
to use more buffers.
The maximum number of buffers depends of PAGE_SHIFT value and can
go up to 0x7fff when PAGE_SHIFT = 12.
With this encoding pattern we know the maximum number that a queue
could store so we can check it at  queue init time.
It also make easier and faster to find buffer and plane from using
the offset field.
Change __find_plane_by_offset() prototype to return the video buffer
itself rather than it index.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/common/videobuf2/videobuf2-core.c   | 73 +++++++++----------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
index a5e57affeb30..09be8e026044 100644
--- a/drivers/media/common/videobuf2/videobuf2-core.c
+++ b/drivers/media/common/videobuf2/videobuf2-core.c
@@ -31,6 +31,11 @@
 
 #include <trace/events/vb2.h>
 
+#define PLANE_INDEX_SHIFT	(PAGE_SHIFT + 3)
+#define PLANE_INDEX_MASK	0x7
+#define MAX_BUFFER_INDEX	BIT_MASK(30 - PLANE_INDEX_SHIFT)
+#define BUFFER_INDEX_MASK	(MAX_BUFFER_INDEX - 1)
+
 static int debug;
 module_param(debug, int, 0644);
 
@@ -358,21 +363,27 @@ static void __setup_offsets(struct vb2_buffer *vb)
 	unsigned int plane;
 	unsigned long offset = 0;
 
-	if (vb->index) {
-		struct vb2_buffer *prev = q->bufs[vb->index - 1];
-		struct vb2_plane *p = &prev->planes[prev->num_planes - 1];
-
-		offset = PAGE_ALIGN(p->m.offset + p->length);
-	}
+	/*
+	 * The offset "cookie" value has the following constraints:
+	 * - a buffer can have up to 8 planes.
+	 * - v4l2 mem2mem uses bit 30 to distinguish between
+	 *   OUTPUT (aka "source", bit 30 is 0) and
+	 *   CAPTURE (aka "destination", bit 30 is 1) buffers.
+	 * - must be page aligned
+	 * That led to this bit mapping when PAGE_SHIFT = 12:
+	 * |30                |29        15|14       12|11 0|
+	 * |DST_QUEUE_OFF_BASE|buffer index|plane index| 0  |
+	 * where there are 15 bits to store the buffer index.
+	 * Depending on PAGE_SHIFT value we can have fewer bits
+	 * to store the buffer index.
+	 */
+	offset = vb->index << PLANE_INDEX_SHIFT;
 
 	for (plane = 0; plane < vb->num_planes; ++plane) {
-		vb->planes[plane].m.offset = offset;
+		vb->planes[plane].m.offset = offset + (plane << PAGE_SHIFT);
 
 		dprintk(q, 3, "buffer %d, plane %d offset 0x%08lx\n",
 				vb->index, plane, offset);
-
-		offset += vb->planes[plane].length;
-		offset = PAGE_ALIGN(offset);
 	}
 }
 
@@ -2188,10 +2199,9 @@ EXPORT_SYMBOL_GPL(vb2_core_streamoff);
  * __find_plane_by_offset() - find plane associated with the given offset
  */
 static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
-			unsigned int *_buffer, unsigned int *_plane)
+			struct vb2_buffer **vb, unsigned int *plane)
 {
-	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int buffer;
 
 	/*
 	 * Sanity checks to ensure the lock is held, MEMORY_MMAP is
@@ -2209,24 +2219,15 @@ static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
 		return -EBUSY;
 	}
 
-	/*
-	 * Go over all buffers and their planes, comparing the given offset
-	 * with an offset assigned to each plane. If a match is found,
-	 * return its buffer and plane numbers.
-	 */
-	for (buffer = 0; buffer < q->num_buffers; ++buffer) {
-		vb = q->bufs[buffer];
+	/* Get buffer and plane from the offset */
+	buffer = (offset >> PLANE_INDEX_SHIFT) & BUFFER_INDEX_MASK;
+	*plane = (offset >> PAGE_SHIFT) & PLANE_INDEX_MASK;
 
-		for (plane = 0; plane < vb->num_planes; ++plane) {
-			if (vb->planes[plane].m.offset == offset) {
-				*_buffer = buffer;
-				*_plane = plane;
-				return 0;
-			}
-		}
-	}
+	if (buffer >= q->num_buffers || *plane >= q->bufs[buffer]->num_planes)
+		return -EINVAL;
 
-	return -EINVAL;
+	*vb = q->bufs[buffer];
+	return 0;
 }
 
 int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
@@ -2306,7 +2307,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 {
 	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer = 0, plane = 0;
+	unsigned int plane = 0;
 	int ret;
 	unsigned long length;
 
@@ -2335,12 +2336,10 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	/*
 	 * MMAP requires page_aligned buffers.
 	 * The buffer length was page_aligned at __vb2_buf_mem_alloc(),
@@ -2368,7 +2367,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	if (ret)
 		return ret;
 
-	dprintk(q, 3, "buffer %d, plane %d successfully mapped\n", buffer, plane);
+	dprintk(q, 3, "buffer %u, plane %d successfully mapped\n", vb->index, plane);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(vb2_mmap);
@@ -2382,7 +2381,7 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 {
 	unsigned long offset = pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int plane;
 	void *vaddr;
 	int ret;
 
@@ -2392,12 +2391,10 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	vaddr = vb2_plane_vaddr(vb, plane);
 	mutex_unlock(&q->mmap_lock);
 	return vaddr ? (unsigned long)vaddr : -EINVAL;
-- 
2.39.2


WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: mchehab@kernel.org, tfiga@chromium.org, m.szyprowski@samsung.com,
	ming.qian@nxp.com, ezequiel@vanguardiasur.com.ar,
	p.zabel@pengutronix.de, gregkh@linuxfoundation.org,
	hverkuil-cisco@xs4all.nl, nicolas.dufresne@collabora.com
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-rockchip@lists.infradead.org,
	linux-staging@lists.linux.dev, kernel@collabora.com,
	Benjamin Gaignard <benjamin.gaignard@collabora.com>
Subject: [PATCH v13 02/56] media: videobuf2: Rework offset 'cookie' encoding pattern
Date: Thu, 19 Oct 2023 14:51:28 +0200	[thread overview]
Message-ID: <20231019125222.21370-3-benjamin.gaignard@collabora.com> (raw)
In-Reply-To: <20231019125222.21370-1-benjamin.gaignard@collabora.com>

Change how offset 'cookie' field value is computed to make possible
to use more buffers.
The maximum number of buffers depends of PAGE_SHIFT value and can
go up to 0x7fff when PAGE_SHIFT = 12.
With this encoding pattern we know the maximum number that a queue
could store so we can check it at  queue init time.
It also make easier and faster to find buffer and plane from using
the offset field.
Change __find_plane_by_offset() prototype to return the video buffer
itself rather than it index.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/common/videobuf2/videobuf2-core.c   | 73 +++++++++----------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
index a5e57affeb30..09be8e026044 100644
--- a/drivers/media/common/videobuf2/videobuf2-core.c
+++ b/drivers/media/common/videobuf2/videobuf2-core.c
@@ -31,6 +31,11 @@
 
 #include <trace/events/vb2.h>
 
+#define PLANE_INDEX_SHIFT	(PAGE_SHIFT + 3)
+#define PLANE_INDEX_MASK	0x7
+#define MAX_BUFFER_INDEX	BIT_MASK(30 - PLANE_INDEX_SHIFT)
+#define BUFFER_INDEX_MASK	(MAX_BUFFER_INDEX - 1)
+
 static int debug;
 module_param(debug, int, 0644);
 
@@ -358,21 +363,27 @@ static void __setup_offsets(struct vb2_buffer *vb)
 	unsigned int plane;
 	unsigned long offset = 0;
 
-	if (vb->index) {
-		struct vb2_buffer *prev = q->bufs[vb->index - 1];
-		struct vb2_plane *p = &prev->planes[prev->num_planes - 1];
-
-		offset = PAGE_ALIGN(p->m.offset + p->length);
-	}
+	/*
+	 * The offset "cookie" value has the following constraints:
+	 * - a buffer can have up to 8 planes.
+	 * - v4l2 mem2mem uses bit 30 to distinguish between
+	 *   OUTPUT (aka "source", bit 30 is 0) and
+	 *   CAPTURE (aka "destination", bit 30 is 1) buffers.
+	 * - must be page aligned
+	 * That led to this bit mapping when PAGE_SHIFT = 12:
+	 * |30                |29        15|14       12|11 0|
+	 * |DST_QUEUE_OFF_BASE|buffer index|plane index| 0  |
+	 * where there are 15 bits to store the buffer index.
+	 * Depending on PAGE_SHIFT value we can have fewer bits
+	 * to store the buffer index.
+	 */
+	offset = vb->index << PLANE_INDEX_SHIFT;
 
 	for (plane = 0; plane < vb->num_planes; ++plane) {
-		vb->planes[plane].m.offset = offset;
+		vb->planes[plane].m.offset = offset + (plane << PAGE_SHIFT);
 
 		dprintk(q, 3, "buffer %d, plane %d offset 0x%08lx\n",
 				vb->index, plane, offset);
-
-		offset += vb->planes[plane].length;
-		offset = PAGE_ALIGN(offset);
 	}
 }
 
@@ -2188,10 +2199,9 @@ EXPORT_SYMBOL_GPL(vb2_core_streamoff);
  * __find_plane_by_offset() - find plane associated with the given offset
  */
 static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
-			unsigned int *_buffer, unsigned int *_plane)
+			struct vb2_buffer **vb, unsigned int *plane)
 {
-	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int buffer;
 
 	/*
 	 * Sanity checks to ensure the lock is held, MEMORY_MMAP is
@@ -2209,24 +2219,15 @@ static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
 		return -EBUSY;
 	}
 
-	/*
-	 * Go over all buffers and their planes, comparing the given offset
-	 * with an offset assigned to each plane. If a match is found,
-	 * return its buffer and plane numbers.
-	 */
-	for (buffer = 0; buffer < q->num_buffers; ++buffer) {
-		vb = q->bufs[buffer];
+	/* Get buffer and plane from the offset */
+	buffer = (offset >> PLANE_INDEX_SHIFT) & BUFFER_INDEX_MASK;
+	*plane = (offset >> PAGE_SHIFT) & PLANE_INDEX_MASK;
 
-		for (plane = 0; plane < vb->num_planes; ++plane) {
-			if (vb->planes[plane].m.offset == offset) {
-				*_buffer = buffer;
-				*_plane = plane;
-				return 0;
-			}
-		}
-	}
+	if (buffer >= q->num_buffers || *plane >= q->bufs[buffer]->num_planes)
+		return -EINVAL;
 
-	return -EINVAL;
+	*vb = q->bufs[buffer];
+	return 0;
 }
 
 int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
@@ -2306,7 +2307,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 {
 	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer = 0, plane = 0;
+	unsigned int plane = 0;
 	int ret;
 	unsigned long length;
 
@@ -2335,12 +2336,10 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	/*
 	 * MMAP requires page_aligned buffers.
 	 * The buffer length was page_aligned at __vb2_buf_mem_alloc(),
@@ -2368,7 +2367,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	if (ret)
 		return ret;
 
-	dprintk(q, 3, "buffer %d, plane %d successfully mapped\n", buffer, plane);
+	dprintk(q, 3, "buffer %u, plane %d successfully mapped\n", vb->index, plane);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(vb2_mmap);
@@ -2382,7 +2381,7 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 {
 	unsigned long offset = pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int plane;
 	void *vaddr;
 	int ret;
 
@@ -2392,12 +2391,10 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	vaddr = vb2_plane_vaddr(vb, plane);
 	mutex_unlock(&q->mmap_lock);
 	return vaddr ? (unsigned long)vaddr : -EINVAL;
-- 
2.39.2


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

WARNING: multiple messages have this Message-ID (diff)
From: Benjamin Gaignard <benjamin.gaignard@collabora.com>
To: mchehab@kernel.org, tfiga@chromium.org, m.szyprowski@samsung.com,
	ming.qian@nxp.com, ezequiel@vanguardiasur.com.ar,
	p.zabel@pengutronix.de, gregkh@linuxfoundation.org,
	hverkuil-cisco@xs4all.nl, nicolas.dufresne@collabora.com
Cc: linux-media@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	linux-arm-msm@vger.kernel.org,
	linux-rockchip@lists.infradead.org,
	linux-staging@lists.linux.dev, kernel@collabora.com,
	Benjamin Gaignard <benjamin.gaignard@collabora.com>
Subject: [PATCH v13 02/56] media: videobuf2: Rework offset 'cookie' encoding pattern
Date: Thu, 19 Oct 2023 14:51:28 +0200	[thread overview]
Message-ID: <20231019125222.21370-3-benjamin.gaignard@collabora.com> (raw)
In-Reply-To: <20231019125222.21370-1-benjamin.gaignard@collabora.com>

Change how offset 'cookie' field value is computed to make possible
to use more buffers.
The maximum number of buffers depends of PAGE_SHIFT value and can
go up to 0x7fff when PAGE_SHIFT = 12.
With this encoding pattern we know the maximum number that a queue
could store so we can check it at  queue init time.
It also make easier and faster to find buffer and plane from using
the offset field.
Change __find_plane_by_offset() prototype to return the video buffer
itself rather than it index.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/common/videobuf2/videobuf2-core.c   | 73 +++++++++----------
 1 file changed, 35 insertions(+), 38 deletions(-)

diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
index a5e57affeb30..09be8e026044 100644
--- a/drivers/media/common/videobuf2/videobuf2-core.c
+++ b/drivers/media/common/videobuf2/videobuf2-core.c
@@ -31,6 +31,11 @@
 
 #include <trace/events/vb2.h>
 
+#define PLANE_INDEX_SHIFT	(PAGE_SHIFT + 3)
+#define PLANE_INDEX_MASK	0x7
+#define MAX_BUFFER_INDEX	BIT_MASK(30 - PLANE_INDEX_SHIFT)
+#define BUFFER_INDEX_MASK	(MAX_BUFFER_INDEX - 1)
+
 static int debug;
 module_param(debug, int, 0644);
 
@@ -358,21 +363,27 @@ static void __setup_offsets(struct vb2_buffer *vb)
 	unsigned int plane;
 	unsigned long offset = 0;
 
-	if (vb->index) {
-		struct vb2_buffer *prev = q->bufs[vb->index - 1];
-		struct vb2_plane *p = &prev->planes[prev->num_planes - 1];
-
-		offset = PAGE_ALIGN(p->m.offset + p->length);
-	}
+	/*
+	 * The offset "cookie" value has the following constraints:
+	 * - a buffer can have up to 8 planes.
+	 * - v4l2 mem2mem uses bit 30 to distinguish between
+	 *   OUTPUT (aka "source", bit 30 is 0) and
+	 *   CAPTURE (aka "destination", bit 30 is 1) buffers.
+	 * - must be page aligned
+	 * That led to this bit mapping when PAGE_SHIFT = 12:
+	 * |30                |29        15|14       12|11 0|
+	 * |DST_QUEUE_OFF_BASE|buffer index|plane index| 0  |
+	 * where there are 15 bits to store the buffer index.
+	 * Depending on PAGE_SHIFT value we can have fewer bits
+	 * to store the buffer index.
+	 */
+	offset = vb->index << PLANE_INDEX_SHIFT;
 
 	for (plane = 0; plane < vb->num_planes; ++plane) {
-		vb->planes[plane].m.offset = offset;
+		vb->planes[plane].m.offset = offset + (plane << PAGE_SHIFT);
 
 		dprintk(q, 3, "buffer %d, plane %d offset 0x%08lx\n",
 				vb->index, plane, offset);
-
-		offset += vb->planes[plane].length;
-		offset = PAGE_ALIGN(offset);
 	}
 }
 
@@ -2188,10 +2199,9 @@ EXPORT_SYMBOL_GPL(vb2_core_streamoff);
  * __find_plane_by_offset() - find plane associated with the given offset
  */
 static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
-			unsigned int *_buffer, unsigned int *_plane)
+			struct vb2_buffer **vb, unsigned int *plane)
 {
-	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int buffer;
 
 	/*
 	 * Sanity checks to ensure the lock is held, MEMORY_MMAP is
@@ -2209,24 +2219,15 @@ static int __find_plane_by_offset(struct vb2_queue *q, unsigned long offset,
 		return -EBUSY;
 	}
 
-	/*
-	 * Go over all buffers and their planes, comparing the given offset
-	 * with an offset assigned to each plane. If a match is found,
-	 * return its buffer and plane numbers.
-	 */
-	for (buffer = 0; buffer < q->num_buffers; ++buffer) {
-		vb = q->bufs[buffer];
+	/* Get buffer and plane from the offset */
+	buffer = (offset >> PLANE_INDEX_SHIFT) & BUFFER_INDEX_MASK;
+	*plane = (offset >> PAGE_SHIFT) & PLANE_INDEX_MASK;
 
-		for (plane = 0; plane < vb->num_planes; ++plane) {
-			if (vb->planes[plane].m.offset == offset) {
-				*_buffer = buffer;
-				*_plane = plane;
-				return 0;
-			}
-		}
-	}
+	if (buffer >= q->num_buffers || *plane >= q->bufs[buffer]->num_planes)
+		return -EINVAL;
 
-	return -EINVAL;
+	*vb = q->bufs[buffer];
+	return 0;
 }
 
 int vb2_core_expbuf(struct vb2_queue *q, int *fd, unsigned int type,
@@ -2306,7 +2307,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 {
 	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer = 0, plane = 0;
+	unsigned int plane = 0;
 	int ret;
 	unsigned long length;
 
@@ -2335,12 +2336,10 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	/*
 	 * MMAP requires page_aligned buffers.
 	 * The buffer length was page_aligned at __vb2_buf_mem_alloc(),
@@ -2368,7 +2367,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct *vma)
 	if (ret)
 		return ret;
 
-	dprintk(q, 3, "buffer %d, plane %d successfully mapped\n", buffer, plane);
+	dprintk(q, 3, "buffer %u, plane %d successfully mapped\n", vb->index, plane);
 	return 0;
 }
 EXPORT_SYMBOL_GPL(vb2_mmap);
@@ -2382,7 +2381,7 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 {
 	unsigned long offset = pgoff << PAGE_SHIFT;
 	struct vb2_buffer *vb;
-	unsigned int buffer, plane;
+	unsigned int plane;
 	void *vaddr;
 	int ret;
 
@@ -2392,12 +2391,10 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
 	 * Find the plane corresponding to the offset passed by userspace. This
 	 * will return an error if not MEMORY_MMAP or file I/O is in progress.
 	 */
-	ret = __find_plane_by_offset(q, offset, &buffer, &plane);
+	ret = __find_plane_by_offset(q, offset, &vb, &plane);
 	if (ret)
 		goto unlock;
 
-	vb = q->bufs[buffer];
-
 	vaddr = vb2_plane_vaddr(vb, plane);
 	mutex_unlock(&q->mmap_lock);
 	return vaddr ? (unsigned long)vaddr : -EINVAL;
-- 
2.39.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2023-10-19 12:52 UTC|newest]

Thread overview: 183+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-19 12:51 [PATCH v13 00/56] Add DELETE_BUF ioctl Benjamin Gaignard
2023-10-19 12:51 ` Benjamin Gaignard
2023-10-19 12:51 ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 01/56] media: videobuf2: Rename offset parameter Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` Benjamin Gaignard [this message]
2023-10-19 12:51   ` [PATCH v13 02/56] media: videobuf2: Rework offset 'cookie' encoding pattern Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 03/56] media: videobuf2: Stop spamming kernel log with all queue counter Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 04/56] media: videobuf2: Use vb2_buffer instead of index Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 05/56] media: videobuf2: Access vb2_queue bufs array through helper functions Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 06/56] media: videobuf2: Remove duplicated index vs q->num_buffers check Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 07/56] media: videobuf2: Add helper to get queue number of buffers Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 08/56] media: videobuf2: Use vb2_get_num_buffers() helper Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 09/56] media: amphion: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 10/56] media: amphion: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 11/56] media: mediatek: jpeg: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 12/56] media: mediatek: vdec: Remove useless loop Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 13/56] media: mediatek: vcodec: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 14/56] media: sti: hva: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 15/56] media: visl: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 16/56] media: atomisp: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 17/56] media: atomisp: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 18/56] media: dvb-core: Use vb2_get_buffer() instead of directly access to buffers array Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 19/56] media: dvb-core: Do not initialize twice queue num_buffer field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 20/56] media: dvb-frontends: rtl2832: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 21/56] media: pci: dt3155: Remove useless check Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 22/56] media: pci: tw686x: Stop direct calls to queue num_buffers field Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 23/56] media: pci: cx18: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 24/56] media: pci: netup_unidvb: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 25/56] media: pci: tw68: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 26/56] media: i2c: video-i2c: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 27/56] media: coda: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 28/56] media: nxp: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 29/56] media: verisilicon: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 30/56] media: test-drivers: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 31/56] media: imx: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 32/56] media: meson: vdec: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51 ` [PATCH v13 33/56] touchscreen: sur40: " Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-19 12:51   ` Benjamin Gaignard
2023-10-29  2:29   ` Dmitry Torokhov
2023-10-29  2:29     ` Dmitry Torokhov
2023-10-29  2:29     ` Dmitry Torokhov
2023-10-19 12:52 ` [PATCH v13 34/56] sample: v4l: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 35/56] media: cedrus: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 36/56] media: nuvoton: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 37/56] media: renesas: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 38/56] media: ti: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 39/56] media: usb: airspy: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 40/56] media: usb: cx231xx: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 41/56] media: usb: hackrf: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 42/56] media: usb: usbtv: " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 43/56] media: videobuf2: Be more flexible on the number of queue stored buffers Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 44/56] media: core: Report the maximum possible number of buffers for the queue Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 45/56] media: test-drivers: vivid: Increase max supported buffers for capture queues Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 46/56] media: test-drivers: vicodec: Increase max supported capture queue buffers Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 47/56] media: verisilicon: Refactor postprocessor to store more buffers Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 48/56] media: verisilicon: Store chroma and motion vectors offset Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 49/56] media: verisilicon: g2: Use common helpers to compute chroma and mv offsets Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 50/56] media: verisilicon: vp9: Allow to change resolution while streaming Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 51/56] media: core: Rework how create_buf index returned value is computed Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 52/56] media: core: Add bitmap manage bufs array entries Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 53/56] media: core: Free range of buffers Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 54/56] media: v4l2: Add DELETE_BUFS ioctl Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 55/56] media: v4l2: Add mem2mem helpers for " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52 ` [PATCH v13 56/56] media: test-drivers: Use helper " Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-19 12:52   ` Benjamin Gaignard
2023-10-25 12:17 ` [PATCH v13 00/56] Add DELETE_BUF ioctl Hans Verkuil
2023-10-25 12:17   ` Hans Verkuil
2023-10-25 12:17   ` Hans Verkuil
2023-10-31  9:04 ` Hans Verkuil
2023-10-31  9:04   ` Hans Verkuil
2023-10-31  9:04   ` Hans Verkuil
2023-10-31 16:37   ` Benjamin Gaignard
2023-10-31 16:37     ` Benjamin Gaignard
2023-10-31 16:37     ` Benjamin Gaignard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231019125222.21370-3-benjamin.gaignard@collabora.com \
    --to=benjamin.gaignard@collabora.com \
    --cc=ezequiel@vanguardiasur.com.ar \
    --cc=gregkh@linuxfoundation.org \
    --cc=hverkuil-cisco@xs4all.nl \
    --cc=kernel@collabora.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-rockchip@lists.infradead.org \
    --cc=linux-staging@lists.linux.dev \
    --cc=m.szyprowski@samsung.com \
    --cc=mchehab@kernel.org \
    --cc=ming.qian@nxp.com \
    --cc=nicolas.dufresne@collabora.com \
    --cc=p.zabel@pengutronix.de \
    --cc=tfiga@chromium.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.