Hi Laurent,
On 6/8/19 2:38 PM, Laurent Pinchart wrote:
> When debugging issues that involve more than one video queue, messages
> related to multiple queues get interleaved without any easy way to tell
> which queue they relate to. Fix this by printing the queue pointer for
> all debug messages in the vb2 core and V4L2 layers.
I like the idea, but I think it can be done better:
I'd suggest adding a name field to struct vb2_queue. In vb2_core_queue_init()
you check if name was set, and if not, then fill it with e.g.:
snprintf(q->name, sizeof(q->name), "%s-%p",
q->is_output ? "out" : "cap", q);
The out/cap prefix is very useful for debugging m2m devices.
Perhaps we should also introduce a vb2_queue_init_name() so drivers can
specify a name for the queue.
>
> Signed-off-by: Laurent Pinchart <[email protected]>
> ---
> Changes since v1:
>
> - Fix format specifiers in vb2 ops-related macros
> ---
> .../media/common/videobuf2/videobuf2-core.c | 219 +++++++++---------
> .../media/common/videobuf2/videobuf2-v4l2.c | 55 ++---
> 2 files changed, 139 insertions(+), 135 deletions(-)
>
> diff --git a/drivers/media/common/videobuf2/videobuf2-core.c
> b/drivers/media/common/videobuf2/videobuf2-core.c
> index 4489744fbbd9..05677ebdb21f 100644
> --- a/drivers/media/common/videobuf2/videobuf2-core.c
> +++ b/drivers/media/common/videobuf2/videobuf2-core.c
> @@ -34,10 +34,10 @@
> static int debug;
> module_param(debug, int, 0644);
>
> -#define dprintk(level, fmt, arg...) \
> - do { \
> - if (debug >= level) \
> - pr_info("%s: " fmt, __func__, ## arg); \
> +#define dprintk(q, level, fmt, arg...)
> \
> + do { \
> + if (debug >= level) \
> + pr_info("(q=%p) %s: " fmt, q, __func__, ## arg);\
And with the proposed change I'd change this to:
pr_info("%s %s: " fmt, (q)->name, __func__, ## arg);\
Regards,
Hans
> } while (0)
>
> #ifdef CONFIG_VIDEO_ADV_DEBUG
> @@ -51,8 +51,8 @@ module_param(debug, int, 0644);
> */
>
> #define log_memop(vb, op) \
> - dprintk(2, "call_memop(%p, %d, %s)%s\n", \
> - (vb)->vb2_queue, (vb)->index, #op, \
> + dprintk((vb)->vb2_queue, 2, "call_memop(%d, %s)%s\n", \
> + (vb)->index, #op, \
> (vb)->vb2_queue->mem_ops->op ? "" : " (nop)")
>
> #define call_memop(vb, op, args...) \
> @@ -90,7 +90,7 @@ module_param(debug, int, 0644);
> })
>
> #define log_qop(q, op)
> \
> - dprintk(2, "call_qop(%p, %s)%s\n", q, #op, \
> + dprintk(q, 2, "call_qop(%s)%s\n", #op, \
> (q)->ops->op ? "" : " (nop)")
>
> #define call_qop(q, op, args...) \
> @@ -113,8 +113,8 @@ module_param(debug, int, 0644);
> })
>
> #define log_vb_qop(vb, op, args...) \
> - dprintk(2, "call_vb_qop(%p, %d, %s)%s\n", \
> - (vb)->vb2_queue, (vb)->index, #op, \
> + dprintk((vb)->vb2_queue, 2, "call_vb_qop(%d, %s)%s\n", \
> + (vb)->index, #op, \
> (vb)->vb2_queue->ops->op ? "" : " (nop)")
>
> #define call_vb_qop(vb, op, args...) \
> @@ -246,7 +246,8 @@ static void __vb2_buf_mem_free(struct vb2_buffer *vb)
> for (plane = 0; plane < vb->num_planes; ++plane) {
> call_void_memop(vb, put, vb->planes[plane].mem_priv);
> vb->planes[plane].mem_priv = NULL;
> - dprintk(3, "freed plane %d of buffer %d\n", plane, vb->index);
> + dprintk(vb->vb2_queue, 3, "freed plane %d of buffer %d\n",
> + plane, vb->index);
> }
> }
>
> @@ -316,7 +317,7 @@ static void __setup_offsets(struct vb2_buffer *vb)
> for (plane = 0; plane < vb->num_planes; ++plane) {
> vb->planes[plane].m.offset = off;
>
> - dprintk(3, "buffer %d, plane %d offset 0x%08lx\n",
> + dprintk(q, 3, "buffer %d, plane %d offset 0x%08lx\n",
> vb->index, plane, off);
>
> off += vb->planes[plane].length;
> @@ -347,7 +348,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum
> vb2_memory memory,
> /* Allocate videobuf buffer structures */
> vb = kzalloc(q->buf_struct_size, GFP_KERNEL);
> if (!vb) {
> - dprintk(1, "memory alloc for buffer struct failed\n");
> + dprintk(q, 1, "memory alloc for buffer struct
> failed\n");
> break;
> }
>
> @@ -369,7 +370,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum
> vb2_memory memory,
> if (memory == VB2_MEMORY_MMAP) {
> ret = __vb2_buf_mem_alloc(vb);
> if (ret) {
> - dprintk(1, "failed allocating memory for buffer
> %d\n",
> + dprintk(q, 1, "failed allocating memory for
> buffer %d\n",
> buffer);
> q->bufs[vb->index] = NULL;
> kfree(vb);
> @@ -383,7 +384,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum
> vb2_memory memory,
> */
> ret = call_vb_qop(vb, buf_init, vb);
> if (ret) {
> - dprintk(1, "buffer %d %p initialization
> failed\n",
> + dprintk(q, 1, "buffer %d %p initialization
> failed\n",
> buffer, vb);
> __vb2_buf_mem_free(vb);
> q->bufs[vb->index] = NULL;
> @@ -393,7 +394,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum
> vb2_memory memory,
> }
> }
>
> - dprintk(1, "allocated %d buffers, %d plane(s) each\n",
> + dprintk(q, 1, "allocated %d buffers, %d plane(s) each\n",
> buffer, num_planes);
>
> return buffer;
> @@ -445,7 +446,7 @@ static int __vb2_queue_free(struct vb2_queue *q, unsigned
> int buffers)
> if (q->bufs[buffer] == NULL)
> continue;
> if (q->bufs[buffer]->state == VB2_BUF_STATE_PREPARING) {
> - dprintk(1, "preparing buffers, cannot free\n");
> + dprintk(q, 1, "preparing buffers, cannot free\n");
> return -EAGAIN;
> }
> }
> @@ -623,12 +624,12 @@ int vb2_verify_memory_type(struct vb2_queue *q,
> {
> if (memory != VB2_MEMORY_MMAP && memory != VB2_MEMORY_USERPTR &&
> memory != VB2_MEMORY_DMABUF) {
> - dprintk(1, "unsupported memory type\n");
> + dprintk(q, 1, "unsupported memory type\n");
> return -EINVAL;
> }
>
> if (type != q->type) {
> - dprintk(1, "requested type is incorrect\n");
> + dprintk(q, 1, "requested type is incorrect\n");
> return -EINVAL;
> }
>
> @@ -637,17 +638,17 @@ int vb2_verify_memory_type(struct vb2_queue *q,
> * are available.
> */
> if (memory == VB2_MEMORY_MMAP && __verify_mmap_ops(q)) {
> - dprintk(1, "MMAP for current setup unsupported\n");
> + dprintk(q, 1, "MMAP for current setup unsupported\n");
> return -EINVAL;
> }
>
> if (memory == VB2_MEMORY_USERPTR && __verify_userptr_ops(q)) {
> - dprintk(1, "USERPTR for current setup unsupported\n");
> + dprintk(q, 1, "USERPTR for current setup unsupported\n");
> return -EINVAL;
> }
>
> if (memory == VB2_MEMORY_DMABUF && __verify_dmabuf_ops(q)) {
> - dprintk(1, "DMABUF for current setup unsupported\n");
> + dprintk(q, 1, "DMABUF for current setup unsupported\n");
> return -EINVAL;
> }
>
> @@ -657,7 +658,7 @@ int vb2_verify_memory_type(struct vb2_queue *q,
> * do the memory and type validation.
> */
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
> return 0;
> @@ -673,12 +674,12 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum
> vb2_memory memory,
> int ret;
>
> if (q->streaming) {
> - dprintk(1, "streaming active\n");
> + dprintk(q, 1, "streaming active\n");
> return -EBUSY;
> }
>
> if (q->waiting_in_dqbuf && *count) {
> - dprintk(1, "another dup()ped fd is waiting for a buffer\n");
> + dprintk(q, 1, "another dup()ped fd is waiting for a buffer\n");
> return -EBUSY;
> }
>
> @@ -691,7 +692,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory
> memory,
> mutex_lock(&q->mmap_lock);
> if (debug && q->memory == VB2_MEMORY_MMAP &&
> __buffers_in_use(q))
> - dprintk(1, "memory in use, orphaning buffers\n");
> + dprintk(q, 1, "memory in use, orphaning buffers\n");
>
> /*
> * Call queue_cancel to clean up any buffers in the
> @@ -742,7 +743,7 @@ int vb2_core_reqbufs(struct vb2_queue *q, enum vb2_memory
> memory,
> allocated_buffers =
> __vb2_queue_alloc(q, memory, num_buffers, num_planes,
> plane_sizes);
> if (allocated_buffers == 0) {
> - dprintk(1, "memory allocation failed\n");
> + dprintk(q, 1, "memory allocation failed\n");
> return -ENOMEM;
> }
>
> @@ -812,20 +813,20 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum
> vb2_memory memory,
> int ret;
>
> if (q->num_buffers == VB2_MAX_FRAME) {
> - dprintk(1, "maximum number of buffers already allocated\n");
> + dprintk(q, 1, "maximum number of buffers already allocated\n");
> return -ENOBUFS;
> }
>
> if (!q->num_buffers) {
> if (q->waiting_in_dqbuf && *count) {
> - dprintk(1, "another dup()ped fd is waiting for a
> buffer\n");
> + dprintk(q, 1, "another dup()ped fd is waiting for a
> buffer\n");
> return -EBUSY;
> }
> memset(q->alloc_devs, 0, sizeof(q->alloc_devs));
> q->memory = memory;
> q->waiting_for_buffers = !q->is_output;
> } else if (q->memory != memory) {
> - dprintk(1, "memory model mismatch\n");
> + dprintk(q, 1, "memory model mismatch\n");
> return -EINVAL;
> }
>
> @@ -849,7 +850,7 @@ int vb2_core_create_bufs(struct vb2_queue *q, enum
> vb2_memory memory,
> allocated_buffers = __vb2_queue_alloc(q, memory, num_buffers,
> num_planes, plane_sizes);
> if (allocated_buffers == 0) {
> - dprintk(1, "memory allocation failed\n");
> + dprintk(q, 1, "memory allocation failed\n");
> return -ENOMEM;
> }
>
> @@ -939,7 +940,7 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum
> vb2_buffer_state state)
> */
> vb->cnt_buf_done++;
> #endif
> - dprintk(4, "done processing on buffer %d, state: %d\n",
> + dprintk(q, 4, "done processing on buffer %d, state: %d\n",
> vb->index, state);
>
> if (state != VB2_BUF_STATE_QUEUED) {
> @@ -1029,12 +1030,12 @@ static int __prepare_userptr(struct vb2_buffer *vb)
> && vb->planes[plane].length == planes[plane].length)
> continue;
>
> - dprintk(3, "userspace address for plane %d changed, reacquiring
> memory\n",
> + dprintk(q, 3, "userspace address for plane %d changed,
> reacquiring memory\n",
> plane);
>
> /* Check if the provided plane buffer is large enough */
> if (planes[plane].length < vb->planes[plane].min_length) {
> - dprintk(1, "provided buffer size %u is less than setup
> size %u for plane %d\n",
> + dprintk(q, 1, "provided buffer size %u is less than
> setup size %u for plane %d\n",
> planes[plane].length,
> vb->planes[plane].min_length,
> plane);
> @@ -1064,7 +1065,7 @@ static int __prepare_userptr(struct vb2_buffer *vb)
> planes[plane].m.userptr,
> planes[plane].length, q->dma_dir);
> if (IS_ERR(mem_priv)) {
> - dprintk(1, "failed acquiring userspace memory for plane
> %d\n",
> + dprintk(q, 1, "failed acquiring userspace memory for
> plane %d\n",
> plane);
> ret = PTR_ERR(mem_priv);
> goto err;
> @@ -1091,14 +1092,14 @@ static int __prepare_userptr(struct vb2_buffer *vb)
> */
> ret = call_vb_qop(vb, buf_init, vb);
> if (ret) {
> - dprintk(1, "buffer initialization failed\n");
> + dprintk(q, 1, "buffer initialization failed\n");
> goto err;
> }
> }
>
> ret = call_vb_qop(vb, buf_prepare, vb);
> if (ret) {
> - dprintk(1, "buffer preparation failed\n");
> + dprintk(q, 1, "buffer preparation failed\n");
> call_void_vb_qop(vb, buf_cleanup, vb);
> goto err;
> }
> @@ -1141,7 +1142,7 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
> struct dma_buf *dbuf = dma_buf_get(planes[plane].m.fd);
>
> if (IS_ERR_OR_NULL(dbuf)) {
> - dprintk(1, "invalid dmabuf fd for plane %d\n",
> + dprintk(q, 1, "invalid dmabuf fd for plane %d\n",
> plane);
> ret = -EINVAL;
> goto err;
> @@ -1152,7 +1153,7 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
> planes[plane].length = dbuf->size;
>
> if (planes[plane].length < vb->planes[plane].min_length) {
> - dprintk(1, "invalid dmabuf length %u for plane %d,
> minimum length %u\n",
> + dprintk(q, 1, "invalid dmabuf length %u for plane %d,
> minimum length %u\n",
> planes[plane].length, plane,
> vb->planes[plane].min_length);
> dma_buf_put(dbuf);
> @@ -1167,7 +1168,7 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
> continue;
> }
>
> - dprintk(3, "buffer for plane %d changed\n", plane);
> + dprintk(q, 3, "buffer for plane %d changed\n", plane);
>
> if (!reacquired) {
> reacquired = true;
> @@ -1187,7 +1188,7 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
> q->alloc_devs[plane] ? : q->dev,
> dbuf, planes[plane].length, q->dma_dir);
> if (IS_ERR(mem_priv)) {
> - dprintk(1, "failed to attach dmabuf\n");
> + dprintk(q, 1, "failed to attach dmabuf\n");
> ret = PTR_ERR(mem_priv);
> dma_buf_put(dbuf);
> goto err;
> @@ -1208,7 +1209,7 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
>
> ret = call_memop(vb, map_dmabuf, vb->planes[plane].mem_priv);
> if (ret) {
> - dprintk(1, "failed to map dmabuf for plane %d\n",
> + dprintk(q, 1, "failed to map dmabuf for plane %d\n",
> plane);
> goto err;
> }
> @@ -1233,14 +1234,14 @@ static int __prepare_dmabuf(struct vb2_buffer *vb)
> */
> ret = call_vb_qop(vb, buf_init, vb);
> if (ret) {
> - dprintk(1, "buffer initialization failed\n");
> + dprintk(q, 1, "buffer initialization failed\n");
> goto err;
> }
> }
>
> ret = call_vb_qop(vb, buf_prepare, vb);
> if (ret) {
> - dprintk(1, "buffer preparation failed\n");
> + dprintk(q, 1, "buffer preparation failed\n");
> call_void_vb_qop(vb, buf_cleanup, vb);
> goto err;
> }
> @@ -1276,7 +1277,7 @@ static int __buf_prepare(struct vb2_buffer *vb)
> int ret;
>
> if (q->error) {
> - dprintk(1, "fatal error occurred on queue\n");
> + dprintk(q, 1, "fatal error occurred on queue\n");
> return -EIO;
> }
>
> @@ -1287,7 +1288,7 @@ static int __buf_prepare(struct vb2_buffer *vb)
> if (q->is_output) {
> ret = call_vb_qop(vb, buf_out_validate, vb);
> if (ret) {
> - dprintk(1, "buffer validation failed\n");
> + dprintk(q, 1, "buffer validation failed\n");
> return ret;
> }
> }
> @@ -1311,7 +1312,7 @@ static int __buf_prepare(struct vb2_buffer *vb)
> }
>
> if (ret) {
> - dprintk(1, "buffer preparation failed: %d\n", ret);
> + dprintk(q, 1, "buffer preparation failed: %d\n", ret);
> vb->state = orig_state;
> return ret;
> }
> @@ -1423,12 +1424,12 @@ int vb2_core_prepare_buf(struct vb2_queue *q,
> unsigned int index, void *pb)
>
> vb = q->bufs[index];
> if (vb->state != VB2_BUF_STATE_DEQUEUED) {
> - dprintk(1, "invalid buffer state %d\n",
> + dprintk(q, 1, "invalid buffer state %d\n",
> vb->state);
> return -EINVAL;
> }
> if (vb->prepared) {
> - dprintk(1, "buffer already prepared\n");
> + dprintk(q, 1, "buffer already prepared\n");
> return -EINVAL;
> }
>
> @@ -1439,7 +1440,7 @@ int vb2_core_prepare_buf(struct vb2_queue *q, unsigned
> int index, void *pb)
> /* Fill buffer information for the userspace */
> call_void_bufop(q, fill_user_buffer, vb, pb);
>
> - dprintk(2, "prepare of buffer %d succeeded\n", vb->index);
> + dprintk(q, 2, "prepare of buffer %d succeeded\n", vb->index);
>
> return 0;
> }
> @@ -1477,7 +1478,7 @@ static int vb2_start_streaming(struct vb2_queue *q)
>
> q->start_streaming_called = 0;
>
> - dprintk(1, "driver refused to start streaming\n");
> + dprintk(q, 1, "driver refused to start streaming\n");
> /*
> * If you see this warning, then the driver isn't cleaning up properly
> * after a failed start_streaming(). See the start_streaming()
> @@ -1515,7 +1516,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
> int ret;
>
> if (q->error) {
> - dprintk(1, "fatal error occurred on queue\n");
> + dprintk(q, 1, "fatal error occurred on queue\n");
> return -EIO;
> }
>
> @@ -1523,14 +1524,14 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
>
> if (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
> q->requires_requests) {
> - dprintk(1, "qbuf requires a request\n");
> + dprintk(q, 1, "qbuf requires a request\n");
> return -EBADR;
> }
>
> if ((req && q->uses_qbuf) ||
> (!req && vb->state != VB2_BUF_STATE_IN_REQUEST &&
> q->uses_requests)) {
> - dprintk(1, "queue in wrong mode (qbuf vs requests)\n");
> + dprintk(q, 1, "queue in wrong mode (qbuf vs requests)\n");
> return -EBUSY;
> }
>
> @@ -1539,7 +1540,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
>
> q->uses_requests = 1;
> if (vb->state != VB2_BUF_STATE_DEQUEUED) {
> - dprintk(1, "buffer %d not in dequeued state\n",
> + dprintk(q, 1, "buffer %d not in dequeued state\n",
> vb->index);
> return -EINVAL;
> }
> @@ -1547,7 +1548,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
> if (q->is_output && !vb->prepared) {
> ret = call_vb_qop(vb, buf_out_validate, vb);
> if (ret) {
> - dprintk(1, "buffer validation failed\n");
> + dprintk(q, 1, "buffer validation failed\n");
> return ret;
> }
> }
> @@ -1583,7 +1584,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
> call_void_bufop(q, fill_user_buffer, vb, pb);
> }
>
> - dprintk(2, "qbuf of buffer %d succeeded\n", vb->index);
> + dprintk(q, 2, "qbuf of buffer %d succeeded\n", vb->index);
> return 0;
> }
>
> @@ -1600,10 +1601,10 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
> }
> break;
> case VB2_BUF_STATE_PREPARING:
> - dprintk(1, "buffer still being prepared\n");
> + dprintk(q, 1, "buffer still being prepared\n");
> return -EINVAL;
> default:
> - dprintk(1, "invalid buffer state %d\n", vb->state);
> + dprintk(q, 1, "invalid buffer state %d\n", vb->state);
> return -EINVAL;
> }
>
> @@ -1645,7 +1646,7 @@ int vb2_core_qbuf(struct vb2_queue *q, unsigned int
> index, void *pb,
> return ret;
> }
>
> - dprintk(2, "qbuf of buffer %d succeeded\n", vb->index);
> + dprintk(q, 2, "qbuf of buffer %d succeeded\n", vb->index);
> return 0;
> }
> EXPORT_SYMBOL_GPL(vb2_core_qbuf);
> @@ -1671,22 +1672,22 @@ static int __vb2_wait_for_done_vb(struct vb2_queue
> *q, int nonblocking)
> int ret;
>
> if (q->waiting_in_dqbuf) {
> - dprintk(1, "another dup()ped fd is waiting for a
> buffer\n");
> + dprintk(q, 1, "another dup()ped fd is waiting for a
> buffer\n");
> return -EBUSY;
> }
>
> if (!q->streaming) {
> - dprintk(1, "streaming off, will not wait for
> buffers\n");
> + dprintk(q, 1, "streaming off, will not wait for
> buffers\n");
> return -EINVAL;
> }
>
> if (q->error) {
> - dprintk(1, "Queue in error state, will not wait for
> buffers\n");
> + dprintk(q, 1, "Queue in error state, will not wait for
> buffers\n");
> return -EIO;
> }
>
> if (q->last_buffer_dequeued) {
> - dprintk(3, "last buffer dequeued already, will not wait
> for buffers\n");
> + dprintk(q, 3, "last buffer dequeued already, will not
> wait for buffers\n");
> return -EPIPE;
> }
>
> @@ -1698,7 +1699,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q,
> int nonblocking)
> }
>
> if (nonblocking) {
> - dprintk(3, "nonblocking and no buffers to dequeue, will
> not wait\n");
> + dprintk(q, 3, "nonblocking and no buffers to dequeue,
> will not wait\n");
> return -EAGAIN;
> }
>
> @@ -1713,7 +1714,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q,
> int nonblocking)
> /*
> * All locks have been released, it is safe to sleep now.
> */
> - dprintk(3, "will sleep waiting for buffers\n");
> + dprintk(q, 3, "will sleep waiting for buffers\n");
> ret = wait_event_interruptible(q->done_wq,
> !list_empty(&q->done_list) || !q->streaming ||
> q->error);
> @@ -1725,7 +1726,7 @@ static int __vb2_wait_for_done_vb(struct vb2_queue *q,
> int nonblocking)
> call_void_qop(q, wait_finish, q);
> q->waiting_in_dqbuf = 0;
> if (ret) {
> - dprintk(1, "sleep was interrupted\n");
> + dprintk(q, 1, "sleep was interrupted\n");
> return ret;
> }
> }
> @@ -1773,7 +1774,7 @@ static int __vb2_get_done_vb(struct vb2_queue *q,
> struct vb2_buffer **vb,
> int vb2_wait_for_all_buffers(struct vb2_queue *q)
> {
> if (!q->streaming) {
> - dprintk(1, "streaming off, will not wait for buffers\n");
> + dprintk(q, 1, "streaming off, will not wait for buffers\n");
> return -EINVAL;
> }
>
> @@ -1811,13 +1812,13 @@ int vb2_core_dqbuf(struct vb2_queue *q, unsigned int
> *pindex, void *pb,
>
> switch (vb->state) {
> case VB2_BUF_STATE_DONE:
> - dprintk(3, "returning done buffer\n");
> + dprintk(q, 3, "returning done buffer\n");
> break;
> case VB2_BUF_STATE_ERROR:
> - dprintk(3, "returning done buffer with errors\n");
> + dprintk(q, 3, "returning done buffer with errors\n");
> break;
> default:
> - dprintk(1, "invalid buffer state\n");
> + dprintk(q, 1, "invalid buffer state\n");
> return -EINVAL;
> }
>
> @@ -1848,7 +1849,7 @@ int vb2_core_dqbuf(struct vb2_queue *q, unsigned int
> *pindex, void *pb,
> media_request_put(vb->request);
> vb->request = NULL;
>
> - dprintk(2, "dqbuf of buffer %d, with state %d\n",
> + dprintk(q, 2, "dqbuf of buffer %d, with state %d\n",
> vb->index, vb->state);
>
> return 0;
> @@ -1971,22 +1972,22 @@ int vb2_core_streamon(struct vb2_queue *q, unsigned
> int type)
> int ret;
>
> if (type != q->type) {
> - dprintk(1, "invalid stream type\n");
> + dprintk(q, 1, "invalid stream type\n");
> return -EINVAL;
> }
>
> if (q->streaming) {
> - dprintk(3, "already streaming\n");
> + dprintk(q, 3, "already streaming\n");
> return 0;
> }
>
> if (!q->num_buffers) {
> - dprintk(1, "no buffers have been allocated\n");
> + dprintk(q, 1, "no buffers have been allocated\n");
> return -EINVAL;
> }
>
> if (q->num_buffers < q->min_buffers_needed) {
> - dprintk(1, "need at least %u allocated buffers\n",
> + dprintk(q, 1, "need at least %u allocated buffers\n",
> q->min_buffers_needed);
> return -EINVAL;
> }
> @@ -2006,7 +2007,7 @@ int vb2_core_streamon(struct vb2_queue *q, unsigned int
> type)
>
> q->streaming = 1;
>
> - dprintk(3, "successful\n");
> + dprintk(q, 3, "successful\n");
> return 0;
> }
> EXPORT_SYMBOL_GPL(vb2_core_streamon);
> @@ -2022,7 +2023,7 @@ EXPORT_SYMBOL_GPL(vb2_queue_error);
> int vb2_core_streamoff(struct vb2_queue *q, unsigned int type)
> {
> if (type != q->type) {
> - dprintk(1, "invalid stream type\n");
> + dprintk(q, 1, "invalid stream type\n");
> return -EINVAL;
> }
>
> @@ -2039,7 +2040,7 @@ int vb2_core_streamoff(struct vb2_queue *q, unsigned
> int type)
> q->waiting_for_buffers = !q->is_output;
> q->last_buffer_dequeued = false;
>
> - dprintk(3, "successful\n");
> + dprintk(q, 3, "successful\n");
> return 0;
> }
> EXPORT_SYMBOL_GPL(vb2_core_streamoff);
> @@ -2082,39 +2083,39 @@ int vb2_core_expbuf(struct vb2_queue *q, int *fd,
> unsigned int type,
> struct dma_buf *dbuf;
>
> if (q->memory != VB2_MEMORY_MMAP) {
> - dprintk(1, "queue is not currently set up for mmap\n");
> + dprintk(q, 1, "queue is not currently set up for mmap\n");
> return -EINVAL;
> }
>
> if (!q->mem_ops->get_dmabuf) {
> - dprintk(1, "queue does not support DMA buffer exporting\n");
> + dprintk(q, 1, "queue does not support DMA buffer exporting\n");
> return -EINVAL;
> }
>
> if (flags & ~(O_CLOEXEC | O_ACCMODE)) {
> - dprintk(1, "queue does support only O_CLOEXEC and access mode
> flags\n");
> + dprintk(q, 1, "queue does support only O_CLOEXEC and access
> mode flags\n");
> return -EINVAL;
> }
>
> if (type != q->type) {
> - dprintk(1, "invalid buffer type\n");
> + dprintk(q, 1, "invalid buffer type\n");
> return -EINVAL;
> }
>
> if (index >= q->num_buffers) {
> - dprintk(1, "buffer index out of range\n");
> + dprintk(q, 1, "buffer index out of range\n");
> return -EINVAL;
> }
>
> vb = q->bufs[index];
>
> if (plane >= vb->num_planes) {
> - dprintk(1, "buffer plane out of range\n");
> + dprintk(q, 1, "buffer plane out of range\n");
> return -EINVAL;
> }
>
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "expbuf: file io in progress\n");
> + dprintk(q, 1, "expbuf: file io in progress\n");
> return -EBUSY;
> }
>
> @@ -2123,20 +2124,20 @@ int vb2_core_expbuf(struct vb2_queue *q, int *fd,
> unsigned int type,
> dbuf = call_ptr_memop(vb, get_dmabuf, vb_plane->mem_priv,
> flags & O_ACCMODE);
> if (IS_ERR_OR_NULL(dbuf)) {
> - dprintk(1, "failed to export buffer %d, plane %d\n",
> + dprintk(q, 1, "failed to export buffer %d, plane %d\n",
> index, plane);
> return -EINVAL;
> }
>
> ret = dma_buf_fd(dbuf, flags & ~O_ACCMODE);
> if (ret < 0) {
> - dprintk(3, "buffer %d, plane %d failed to export (%d)\n",
> + dprintk(q, 3, "buffer %d, plane %d failed to export (%d)\n",
> index, plane, ret);
> dma_buf_put(dbuf);
> return ret;
> }
>
> - dprintk(3, "buffer %d, plane %d exported as %d descriptor\n",
> + dprintk(q, 3, "buffer %d, plane %d exported as %d descriptor\n",
> index, plane, ret);
> *fd = ret;
>
> @@ -2153,7 +2154,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct
> *vma)
> unsigned long length;
>
> if (q->memory != VB2_MEMORY_MMAP) {
> - dprintk(1, "queue is not currently set up for mmap\n");
> + dprintk(q, 1, "queue is not currently set up for mmap\n");
> return -EINVAL;
> }
>
> @@ -2161,17 +2162,17 @@ int vb2_mmap(struct vb2_queue *q, struct
> vm_area_struct *vma)
> * Check memory area access mode.
> */
> if (!(vma->vm_flags & VM_SHARED)) {
> - dprintk(1, "invalid vma flags, VM_SHARED needed\n");
> + dprintk(q, 1, "invalid vma flags, VM_SHARED needed\n");
> return -EINVAL;
> }
> if (q->is_output) {
> if (!(vma->vm_flags & VM_WRITE)) {
> - dprintk(1, "invalid vma flags, VM_WRITE needed\n");
> + dprintk(q, 1, "invalid vma flags, VM_WRITE needed\n");
> return -EINVAL;
> }
> } else {
> if (!(vma->vm_flags & VM_READ)) {
> - dprintk(1, "invalid vma flags, VM_READ needed\n");
> + dprintk(q, 1, "invalid vma flags, VM_READ needed\n");
> return -EINVAL;
> }
> }
> @@ -2179,7 +2180,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct
> *vma)
> mutex_lock(&q->mmap_lock);
>
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "mmap: file io in progress\n");
> + dprintk(q, 1, "mmap: file io in progress\n");
> ret = -EBUSY;
> goto unlock;
> }
> @@ -2200,7 +2201,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct
> *vma)
> */
> length = PAGE_ALIGN(vb->planes[plane].length);
> if (length < (vma->vm_end - vma->vm_start)) {
> - dprintk(1,
> + dprintk(q, 1,
> "MMAP invalid, as it would overflow buffer length\n");
> ret = -EINVAL;
> goto unlock;
> @@ -2220,7 +2221,7 @@ int vb2_mmap(struct vb2_queue *q, struct vm_area_struct
> *vma)
> if (ret)
> return ret;
>
> - dprintk(3, "buffer %d, plane %d successfully mapped\n", buffer, plane);
> + dprintk(q, 3, "buffer %d, plane %d successfully mapped\n", buffer,
> plane);
> return 0;
> }
> EXPORT_SYMBOL_GPL(vb2_mmap);
> @@ -2239,7 +2240,7 @@ unsigned long vb2_get_unmapped_area(struct vb2_queue *q,
> int ret;
>
> if (q->memory != VB2_MEMORY_MMAP) {
> - dprintk(1, "queue is not currently set up for mmap\n");
> + dprintk(q, 1, "queue is not currently set up for mmap\n");
> return -EINVAL;
> }
>
> @@ -2479,7 +2480,7 @@ static int __vb2_init_fileio(struct vb2_queue *q, int
> read)
> */
> count = 1;
>
> - dprintk(3, "setting up file io: mode %s, count %d, read_once %d,
> write_immediately %d\n",
> + dprintk(q, 3, "setting up file io: mode %s, count %d, read_once %d,
> write_immediately %d\n",
> (read) ? "read" : "write", count, q->fileio_read_once,
> q->fileio_write_immediately);
>
> @@ -2577,7 +2578,7 @@ static int __vb2_cleanup_fileio(struct vb2_queue *q)
> fileio->count = 0;
> vb2_core_reqbufs(q, fileio->memory, &fileio->count);
> kfree(fileio);
> - dprintk(3, "file io emulator closed\n");
> + dprintk(q, 3, "file io emulator closed\n");
> }
> return 0;
> }
> @@ -2606,7 +2607,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> unsigned index;
> int ret;
>
> - dprintk(3, "mode %s, offset %ld, count %zd, %sblocking\n",
> + dprintk(q, 3, "mode %s, offset %ld, count %zd, %sblocking\n",
> read ? "read" : "write", (long)*ppos, count,
> nonblock ? "non" : "");
>
> @@ -2614,7 +2615,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> return -EINVAL;
>
> if (q->waiting_in_dqbuf) {
> - dprintk(3, "another dup()ped fd is %s\n",
> + dprintk(q, 3, "another dup()ped fd is %s\n",
> read ? "reading" : "writing");
> return -EBUSY;
> }
> @@ -2624,7 +2625,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> */
> if (!vb2_fileio_is_active(q)) {
> ret = __vb2_init_fileio(q, read);
> - dprintk(3, "vb2_init_fileio result: %d\n", ret);
> + dprintk(q, 3, "vb2_init_fileio result: %d\n", ret);
> if (ret)
> return ret;
> }
> @@ -2641,7 +2642,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> * Call vb2_dqbuf to get buffer back.
> */
> ret = vb2_core_dqbuf(q, &index, NULL, nonblock);
> - dprintk(5, "vb2_dqbuf result: %d\n", ret);
> + dprintk(q, 5, "vb2_dqbuf result: %d\n", ret);
> if (ret)
> return ret;
> fileio->dq_count += 1;
> @@ -2672,20 +2673,20 @@ static size_t __vb2_perform_fileio(struct vb2_queue
> *q, char __user *data, size_
> */
> if (buf->pos + count > buf->size) {
> count = buf->size - buf->pos;
> - dprintk(5, "reducing read count: %zd\n", count);
> + dprintk(q, 5, "reducing read count: %zd\n", count);
> }
>
> /*
> * Transfer data to userspace.
> */
> - dprintk(3, "copying %zd bytes - buffer %d, offset %u\n",
> + dprintk(q, 3, "copying %zd bytes - buffer %d, offset %u\n",
> count, index, buf->pos);
> if (read)
> ret = copy_to_user(data, buf->vaddr + buf->pos, count);
> else
> ret = copy_from_user(buf->vaddr + buf->pos, data, count);
> if (ret) {
> - dprintk(3, "error copying data\n");
> + dprintk(q, 3, "error copying data\n");
> return -EFAULT;
> }
>
> @@ -2705,7 +2706,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> * Check if this is the last buffer to read.
> */
> if (read && fileio->read_once && fileio->dq_count == 1) {
> - dprintk(3, "read limit reached\n");
> + dprintk(q, 3, "read limit reached\n");
> return __vb2_cleanup_fileio(q);
> }
>
> @@ -2717,7 +2718,7 @@ static size_t __vb2_perform_fileio(struct vb2_queue *q,
> char __user *data, size_
> if (copy_timestamp)
> b->timestamp = ktime_get_ns();
> ret = vb2_core_qbuf(q, index, NULL, NULL);
> - dprintk(5, "vb2_dbuf result: %d\n", ret);
> + dprintk(q, 5, "vb2_dbuf result: %d\n", ret);
> if (ret)
> return ret;
>
> @@ -2804,7 +2805,7 @@ static int vb2_thread(void *data)
> if (!threadio->stop)
> ret = vb2_core_dqbuf(q, &index, NULL, 0);
> call_void_qop(q, wait_prepare, q);
> - dprintk(5, "file io: vb2_dqbuf result: %d\n", ret);
> + dprintk(q, 5, "file io: vb2_dqbuf result: %d\n", ret);
> if (!ret)
> vb = q->bufs[index];
> }
> @@ -2858,7 +2859,7 @@ int vb2_thread_start(struct vb2_queue *q,
> vb2_thread_fnc fnc, void *priv,
> threadio->priv = priv;
>
> ret = __vb2_init_fileio(q, !q->is_output);
> - dprintk(3, "file io: vb2_init_fileio result: %d\n", ret);
> + dprintk(q, 3, "file io: vb2_init_fileio result: %d\n", ret);
> if (ret)
> goto nomem;
> q->threadio = threadio;
> diff --git a/drivers/media/common/videobuf2/videobuf2-v4l2.c
> b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> index 40d76eb4c2fe..0f034cabcd21 100644
> --- a/drivers/media/common/videobuf2/videobuf2-v4l2.c
> +++ b/drivers/media/common/videobuf2/videobuf2-v4l2.c
> @@ -35,10 +35,11 @@
> static int debug;
> module_param(debug, int, 0644);
>
> -#define dprintk(level, fmt, arg...) \
> +#define dprintk(q, level, fmt, arg...)
> \
> do { \
> if (debug >= level) \
> - pr_info("vb2-v4l2: %s: " fmt, __func__, ## arg); \
> + pr_info("vb2-v4l2: (q=%p) %s: " fmt, \
> + q, __func__, ## arg); \
> } while (0)
>
> /* Flags that are set by us */
> @@ -63,12 +64,14 @@ static int __verify_planes_array(struct vb2_buffer *vb,
> const struct v4l2_buffer
>
> /* Is memory for copying plane information present? */
> if (b->m.planes == NULL) {
> - dprintk(1, "multi-planar buffer passed but planes array not
> provided\n");
> + dprintk(vb->vb2_queue, 1,
> + "multi-planar buffer passed but planes array not
> provided\n");
> return -EINVAL;
> }
>
> if (b->length < vb->num_planes || b->length > VB2_MAX_PLANES) {
> - dprintk(1, "incorrect planes array length, expected %d, got
> %d\n",
> + dprintk(vb->vb2_queue, 1,
> + "incorrect planes array length, expected %d, got %d\n",
> vb->num_planes, b->length);
> return -EINVAL;
> }
> @@ -176,7 +179,7 @@ static int vb2_fill_vb2_v4l2_buffer(struct vb2_buffer
> *vb, struct v4l2_buffer *b
>
> ret = __verify_length(vb, b);
> if (ret < 0) {
> - dprintk(1, "plane parameters verification failed: %d\n", ret);
> + dprintk(q, 1, "plane parameters verification failed: %d\n",
> ret);
> return ret;
> }
> if (b->field == V4L2_FIELD_ALTERNATE && q->is_output) {
> @@ -189,7 +192,7 @@ static int vb2_fill_vb2_v4l2_buffer(struct vb2_buffer
> *vb, struct v4l2_buffer *b
> * that just says that it is either a top or a bottom field,
> * but not which of the two it is.
> */
> - dprintk(1, "the field is incorrectly set to ALTERNATE for an
> output buffer\n");
> + dprintk(q, 1, "the field is incorrectly set to ALTERNATE for an
> output buffer\n");
> return -EINVAL;
> }
> vbuf->sequence = 0;
> @@ -342,23 +345,23 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue
> *q, struct media_device *md
> int ret;
>
> if (b->type != q->type) {
> - dprintk(1, "%s: invalid buffer type\n", opname);
> + dprintk(q, 1, "%s: invalid buffer type\n", opname);
> return -EINVAL;
> }
>
> if (b->index >= q->num_buffers) {
> - dprintk(1, "%s: buffer index out of range\n", opname);
> + dprintk(q, 1, "%s: buffer index out of range\n", opname);
> return -EINVAL;
> }
>
> if (q->bufs[b->index] == NULL) {
> /* Should never happen */
> - dprintk(1, "%s: buffer is NULL\n", opname);
> + dprintk(q, 1, "%s: buffer is NULL\n", opname);
> return -EINVAL;
> }
>
> if (b->memory != q->memory) {
> - dprintk(1, "%s: invalid memory type\n", opname);
> + dprintk(q, 1, "%s: invalid memory type\n", opname);
> return -EINVAL;
> }
>
> @@ -370,7 +373,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q,
> struct media_device *md
>
> if (!is_prepare && (b->flags & V4L2_BUF_FLAG_REQUEST_FD) &&
> vb->state != VB2_BUF_STATE_DEQUEUED) {
> - dprintk(1, "%s: buffer is not in dequeued state\n", opname);
> + dprintk(q, 1, "%s: buffer is not in dequeued state\n", opname);
> return -EINVAL;
> }
>
> @@ -388,19 +391,19 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue
> *q, struct media_device *md
>
> if (!(b->flags & V4L2_BUF_FLAG_REQUEST_FD)) {
> if (q->requires_requests) {
> - dprintk(1, "%s: queue requires requests\n", opname);
> + dprintk(q, 1, "%s: queue requires requests\n", opname);
> return -EBADR;
> }
> if (q->uses_requests) {
> - dprintk(1, "%s: queue uses requests\n", opname);
> + dprintk(q, 1, "%s: queue uses requests\n", opname);
> return -EBUSY;
> }
> return 0;
> } else if (!q->supports_requests) {
> - dprintk(1, "%s: queue does not support requests\n", opname);
> + dprintk(q, 1, "%s: queue does not support requests\n", opname);
> return -EBADR;
> } else if (q->uses_qbuf) {
> - dprintk(1, "%s: queue does not use requests\n", opname);
> + dprintk(q, 1, "%s: queue does not use requests\n", opname);
> return -EBUSY;
> }
>
> @@ -430,13 +433,13 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue
> *q, struct media_device *md
> return -EINVAL;
>
> if (b->request_fd < 0) {
> - dprintk(1, "%s: request_fd < 0\n", opname);
> + dprintk(q, 1, "%s: request_fd < 0\n", opname);
> return -EINVAL;
> }
>
> req = media_request_get_by_fd(mdev, b->request_fd);
> if (IS_ERR(req)) {
> - dprintk(1, "%s: invalid request_fd\n", opname);
> + dprintk(q, 1, "%s: invalid request_fd\n", opname);
> return PTR_ERR(req);
> }
>
> @@ -446,7 +449,7 @@ static int vb2_queue_or_prepare_buf(struct vb2_queue *q,
> struct media_device *md
> */
> if (req->state != MEDIA_REQUEST_STATE_IDLE &&
> req->state != MEDIA_REQUEST_STATE_UPDATING) {
> - dprintk(1, "%s: request is not idle\n", opname);
> + dprintk(q, 1, "%s: request is not idle\n", opname);
> media_request_put(req);
> return -EBUSY;
> }
> @@ -629,12 +632,12 @@ int vb2_querybuf(struct vb2_queue *q, struct
> v4l2_buffer *b)
> int ret;
>
> if (b->type != q->type) {
> - dprintk(1, "wrong buffer type\n");
> + dprintk(q, 1, "wrong buffer type\n");
> return -EINVAL;
> }
>
> if (b->index >= q->num_buffers) {
> - dprintk(1, "buffer index out of range\n");
> + dprintk(q, 1, "buffer index out of range\n");
> return -EINVAL;
> }
> vb = q->bufs[b->index];
> @@ -675,7 +678,7 @@ int vb2_prepare_buf(struct vb2_queue *q, struct
> media_device *mdev,
> int ret;
>
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
>
> @@ -751,7 +754,7 @@ int vb2_qbuf(struct vb2_queue *q, struct media_device
> *mdev,
> int ret;
>
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
>
> @@ -770,12 +773,12 @@ int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer
> *b, bool nonblocking)
> int ret;
>
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
>
> if (b->type != q->type) {
> - dprintk(1, "invalid buffer type\n");
> + dprintk(q, 1, "invalid buffer type\n");
> return -EINVAL;
> }
>
> @@ -799,7 +802,7 @@ EXPORT_SYMBOL_GPL(vb2_dqbuf);
> int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type)
> {
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
> return vb2_core_streamon(q, type);
> @@ -809,7 +812,7 @@ EXPORT_SYMBOL_GPL(vb2_streamon);
> int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type)
> {
> if (vb2_fileio_is_active(q)) {
> - dprintk(1, "file io in progress\n");
> + dprintk(q, 1, "file io in progress\n");
> return -EBUSY;
> }
> return vb2_core_streamoff(q, type);
>