Message ID | 73a2a81d072b56ab25b36c0f40515d83ef45fccc.1514478428.git.mchehab@s-opensource.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Dec 28, 2017 at 02:29:35PM -0200, Mauro Carvalho Chehab wrote: > From: Satendra Singh Thakur <satendra.t@samsung.com> > > Currently, there's a logic with checks if *count is non-zero, > q->num_buffers is zero and q->memory is different than memory. > > That's flawed when the device is initialized, or after the > queues are freed, as it does, unnecessary calls to > __vb2_queue_cancel() and __vb2_queue_free(). > > That can be avoided by making sure that q->memory is set to > VB2_MEMORY_UNKNOWN at vb2_core_queue_init(), and adding such > check at the loop. > > [mchehab@s-opensource.com: fix checkpatch issues and improve the > patch, by setting q->memory to zero at vb2_core_queue_init] > Signed-off-by: Satendra Singh Thakur <satendra.t@samsung.com> > Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com> Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
diff --git a/drivers/media/common/videobuf/videobuf2-core.c b/drivers/media/common/videobuf/videobuf2-core.c index a3b4836fc41d..1793bdb1fe54 100644 --- a/drivers/media/common/videobuf/videobuf2-core.c +++ b/drivers/media/common/videobuf/videobuf2-core.c @@ -523,7 +523,7 @@ static int __vb2_queue_free(struct vb2_queue *q, unsigned int buffers) q->num_buffers -= buffers; if (!q->num_buffers) { - q->memory = 0; + q->memory = VB2_MEMORY_UNKNOWN; INIT_LIST_HEAD(&q->queued_list); } return 0; @@ -665,7 +665,8 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory memory, return -EBUSY; } - if (*count == 0 || q->num_buffers != 0 || q->memory != memory) { + 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. @@ -1997,6 +1998,8 @@ int vb2_core_queue_init(struct vb2_queue *q) mutex_init(&q->mmap_lock); init_waitqueue_head(&q->done_wq); + q->memory = VB2_MEMORY_UNKNOWN; + if (q->buf_struct_size == 0) q->buf_struct_size = sizeof(struct vb2_buffer);