Message ID | 1394578325-11298-5-git-send-email-sheu@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Pawel, Marek, Before taking this to my tree I wanted to get an ACK from one of the videobuf2 maintainers. Could you spare a moment to look through this patch? Best wishes,
Hello, On 2014-04-07 16:41, Kamil Debski wrote: > Pawel, Marek, > > Before taking this to my tree I wanted to get an ACK from one of the > videobuf2 maintainers. Could you spare a moment to look through this > patch? It's not a bug, it is a feature. This was one of the fundamental design requirements to allow applications to track if the memory is used or not. Best regards
Le mardi 08 avril 2014 à 12:51 +0200, Marek Szyprowski a écrit : > Hello, > > On 2014-04-07 16:41, Kamil Debski wrote: > > Pawel, Marek, > > > > Before taking this to my tree I wanted to get an ACK from one of > > the > > videobuf2 maintainers. Could you spare a moment to look through > > this > > patch? > > It's not a bug, it is a feature. This was one of the fundamental > design > requirements to allow applications to track if the memory is used or > not. I still have the impression it is not fully correct for the case buffers are exported using DMABUF. Like if the dmabuf was owning the vb2 buffer instead of the opposite ... Nicolas
Hi, 2015-11-02 19:31 GMT+01:00 Nicolas Dufresne <nicolas.dufresne@collabora.com>: > Le mardi 08 avril 2014 à 12:51 +0200, Marek Szyprowski a écrit : >> Hello, >> >> On 2014-04-07 16:41, Kamil Debski wrote: >> > Pawel, Marek, >> > >> > Before taking this to my tree I wanted to get an ACK from one of >> > the >> > videobuf2 maintainers. Could you spare a moment to look through >> > this >> > patch? >> >> It's not a bug, it is a feature. This was one of the fundamental >> design >> requirements to allow applications to track if the memory is used or >> not. > > I still have the impression it is not fully correct for the case > buffers are exported using DMABUF. Like if the dmabuf was owning the > vb2 buffer instead of the opposite ... I am observing this behaviour too... Tried it, but seems to not do the job on dmabuf buffers... with gstreamer at least ;-). JM -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 8e6695c9..5b6f9da6 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -414,8 +414,7 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) } /** - * __buffer_in_use() - return true if the buffer is in use and - * the queue cannot be freed (by the means of REQBUFS(0)) call + * __buffer_in_use() - return true if the buffer is in use. */ static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) { @@ -435,20 +434,6 @@ static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) } /** - * __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 (__buffer_in_use(q, q->bufs[buffer])) - return true; - } - return false; -} - -/** * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be * returned to userspace */ @@ -681,15 +666,6 @@ static int __reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req) } if (req->count == 0 || q->num_buffers != 0 || q->memory != req->memory) { - /* - * We already have buffers allocated, so first check if they - * are not in use and can be freed. - */ - if (q->memory == V4L2_MEMORY_MMAP && __buffers_in_use(q)) { - dprintk(1, "reqbufs: memory in use, cannot free\n"); - return -EBUSY; - } - ret = __vb2_queue_free(q, q->num_buffers); if (ret) return ret;
v4l2-mem2mem presently does not allow VIDIOC_REQBUFS to destroy outstanding buffers if the queue is of type V4L2_MEMORY_MMAP, and if the buffers are considered "in use". This is different behavior than for other memory types, and prevents us for deallocating buffers in a few cases: * In the case that there are outstanding mmap()ed views on the buffer, refcounting on the videobuf2 buffer backing the vm_area will track lifetime appropriately, * In the case that the buffer has been exported as a DMABUF, refcounting on the videobuf2 bufer backing the DMABUF will track lifetime appropriately. Remove the specific check for type V4L2_MEMOMRY_MMAP when freeing all buffers through VIDIOC_REQBUFS. Signed-off-by: John Sheu <sheu@google.com> --- drivers/media/v4l2-core/videobuf2-core.c | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-)