What should CREATE_BUFS do if count == 0?
- Subject: What should CREATE_BUFS do if count == 0?
- From: Hans Verkuil <hverkuil@xxxxxxxxx>
- Date: Thu, 7 Jun 2012 00:09:27 +0200
- Cc: Guennadi Liakhovetski <g.liakhovetski@xxxxxx>, Pawel Osciak <pawel@xxxxxxxxxx>
- User-agent: KMail/1.13.7 (Linux/3.4.0-rc7-tschai; KDE/4.7.4; x86_64; ; )
Hi all,
I'm extending v4l2-compliance with support for VIDIOC_REQBUFS and VIDIOC_CREATE_BUFS,
and I ran into an undefined issue: what happens if VIDIOC_CREATE_BUFS is called with
count set to 0?
I think there should be a separate test for that. Right now queue_setup will receive
a request for 0 buffers, and I don't know if drivers expect a zero value there.
I suggest that CREATE_BUFS with a count of 0 will only check whether memory and
format.type are valid, and if they are it will just return 0 and do nothing.
Also note that this code in vb2_create_bufs is wrong:
ret = __vb2_queue_alloc(q, create->memory, num_buffers,
num_planes);
if (ret < 0) {
dprintk(1, "Memory allocation failed with error: %d\n", ret);
return ret;
}
It should be:
if (ret == 0) {
__vb2_queue_alloc() returns the number of buffers it managed to allocate,
which is never < 0.
I propose to add the patch included below.
Comments are welcome!
Regards,
Hans
diff --git a/drivers/media/video/videobuf2-core.c b/drivers/media/video/videobuf2-core.c
index a0702fd..01a8312 100644
--- a/drivers/media/video/videobuf2-core.c
+++ b/drivers/media/video/videobuf2-core.c
@@ -647,6 +647,9 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
return -EINVAL;
}
+ if (create->count == 0)
+ return 0;
+
if (q->num_buffers == VIDEO_MAX_FRAME) {
dprintk(1, "%s(): maximum number of buffers already allocated\n",
__func__);
@@ -675,7 +678,7 @@ int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create)
/* Finally, allocate buffers and video memory */
ret = __vb2_queue_alloc(q, create->memory, num_buffers,
num_planes);
- if (ret < 0) {
+ if (ret == 0) {
dprintk(1, "Memory allocation failed with error: %d\n", ret);
return ret;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Input]
[Video for Linux]
[Mplayer Users]
[Linux USB Devel]
[Linux Audio Users]
[Photos]
[Yosemite Photos]
[Linux Kernel]
[Linux SCSI]
[XFree86]
[Devices]
[Yosemite Backpacking]