Hi,

i need your feedback about the dynamic_debug patch. For me it is most
important. It make digging in to uvc code easier, especially for
beginners like me.

Am Sonntag, den 06.03.2011, 11:57 +0100 schrieb Alexey Fisher:
> it make possible use of fine tunable system.
> We can set exact verbosity.
> 
> Use case:
> 
> this will enablle all message in module uvcvideo:
> echo "module uvcvideo +p" > /sys/kernel/debug/dynamic_debug/control
> 
> this will disable message of function uvc_v4l2_do_ioctl:
> echo "func uvc_v4l2_do_ioctl -p" > /sys/kernel/debug/dynamic_debug/control
> 
> Signed-off-by: Alexey Fisher <bug-tr...@fisher-privat.net>
> ---
>  drivers/media/video/uvc/uvc_queue.c |    8 ++-
>  drivers/media/video/uvc/uvc_v4l2.c  |    2 +
>  drivers/media/video/uvc/uvc_video.c |  137 
> ++++++++++++++++++++++++++++-------
>  3 files changed, 120 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/media/video/uvc/uvc_queue.c 
> b/drivers/media/video/uvc/uvc_queue.c
> index 36f3c58..19e6cba 100644
> --- a/drivers/media/video/uvc/uvc_queue.c
> +++ b/drivers/media/video/uvc/uvc_queue.c
> @@ -137,6 +137,9 @@ int uvc_alloc_buffers(struct uvc_video_queue *queue, 
> unsigned int nbuffers,
>       void *mem = NULL;
>       int ret;
>  
> +     pr_debug("%s: nbuffers %u; buflength: %u", __func__,
> +             nbuffers, buflength);
> +
>       if (nbuffers > UVC_MAX_VIDEO_BUFFERS)
>               nbuffers = UVC_MAX_VIDEO_BUFFERS;
>  
> @@ -347,8 +350,9 @@ int uvc_dequeue_buffer(struct uvc_video_queue *queue,
>       if ((ret = uvc_queue_waiton(buf, nonblocking)) < 0)
>               goto done;
>  
> -     uvc_trace(UVC_TRACE_CAPTURE, "Dequeuing buffer %u (%u, %u bytes).\n",
> -             buf->buf.index, buf->state, buf->buf.bytesused);
> +     pr_debug("%s: Dequeuing buffer %u (%u, %u/%u bytes).", __func__,
> +             buf->buf.index, buf->state,
> +             buf->buf.length, buf->buf.bytesused);
>  
>       switch (buf->state) {
>       case UVC_BUF_STATE_ERROR:
> diff --git a/drivers/media/video/uvc/uvc_v4l2.c 
> b/drivers/media/video/uvc/uvc_v4l2.c
> index fa89ebf..3ba2563 100644
> --- a/drivers/media/video/uvc/uvc_v4l2.c
> +++ b/drivers/media/video/uvc/uvc_v4l2.c
> @@ -559,6 +559,8 @@ static long uvc_v4l2_do_ioctl(struct file *file, unsigned 
> int cmd, void *arg)
>       struct uvc_streaming *stream = handle->stream;
>       long ret = 0;
>  
> +     pr_debug("%s: cmd: %u", __func__, cmd);
> +
>       switch (cmd) {
>       /* Query capabilities */
>       case VIDIOC_QUERYCAP:
> diff --git a/drivers/media/video/uvc/uvc_video.c 
> b/drivers/media/video/uvc/uvc_video.c
> index 43f955e..9a95a62 100644
> --- a/drivers/media/video/uvc/uvc_video.c
> +++ b/drivers/media/video/uvc/uvc_video.c
> @@ -73,6 +73,8 @@ int uvc_query_ctrl(struct uvc_device *dev, __u8 query, __u8 
> unit,
>  {
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       ret = __uvc_query_ctrl(dev, query, unit, intfnum, cs, data, size,
>                               UVC_CTRL_CONTROL_TIMEOUT);
>       if (ret != size) {
> @@ -92,6 +94,8 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming 
> *stream,
>       struct uvc_frame *frame = NULL;
>       unsigned int i;
>  
> +     pr_debug("%s", __func__);
> +
>       if (ctrl->bFormatIndex <= 0 ||
>           ctrl->bFormatIndex > stream->nformats)
>               return;
> @@ -110,9 +114,13 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming 
> *stream,
>  
>       if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) ||
>            (ctrl->dwMaxVideoFrameSize == 0 &&
> -           stream->dev->uvc_version < 0x0110))
> +           stream->dev->uvc_version < 0x0110)) {
> +             pr_debug("%s: rewrite dwMaxVideoFrameSize=%u to %u.",
> +                      __func__, ctrl->dwMaxVideoFrameSize,
> +                     frame->dwMaxVideoFrameBufferSize);
>               ctrl->dwMaxVideoFrameSize =
>                       frame->dwMaxVideoFrameBufferSize;
> +     }
>  
>       if (!(format->flags & UVC_FMT_FLAG_COMPRESSED) &&
>           stream->dev->quirks & UVC_QUIRK_FIX_BANDWIDTH &&
> @@ -146,6 +154,9 @@ static void uvc_fixup_video_ctrl(struct uvc_streaming 
> *stream,
>                */
>               bandwidth = max_t(u32, bandwidth, 1024);
>  
> +             pr_debug("%s: rewrite dwMaxPayloadTransferSize=%u to %u.",
> +                     __func__, ctrl->dwMaxPayloadTransferSize, bandwidth);
> +
>               ctrl->dwMaxPayloadTransferSize = bandwidth;
>       }
>  }
> @@ -157,6 +168,8 @@ static int uvc_get_video_ctrl(struct uvc_streaming 
> *stream,
>       __u16 size;
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
>       if ((stream->dev->quirks & UVC_QUIRK_PROBE_DEF) &&
>                       query == UVC_GET_DEF)
> @@ -233,6 +246,20 @@ static int uvc_get_video_ctrl(struct uvc_streaming 
> *stream,
>       uvc_fixup_video_ctrl(stream, ctrl);
>       ret = 0;
>  
> +     pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; "
> +              "dwFrameInterval: %u; wKeyFrameRate: %u; "
> +              "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; "
> +              "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u",
> +             __func__, ctrl->bmHint,
> +             ctrl->bFormatIndex,
> +             ctrl->bFrameIndex,
> +             ctrl->dwFrameInterval,
> +             ctrl->wKeyFrameRate,
> +             ctrl->wCompQuality,
> +             ctrl->wCompWindowSize,
> +             ctrl->wDelay,
> +             ctrl->dwMaxVideoFrameSize,
> +             ctrl->dwMaxPayloadTransferSize);
>  out:
>       kfree(data);
>       return ret;
> @@ -245,6 +272,21 @@ static int uvc_set_video_ctrl(struct uvc_streaming 
> *stream,
>       __u16 size;
>       int ret;
>  
> +     pr_debug("%s: bmHint: %u; bFormatIndex: %u; bFrameIndex: %u; "
> +              "dwFrameInterval: %u; wKeyFrameRate: %u; "
> +              "wCompQuality: %u; wCompWindowSize: %u; wDelay: %u; "
> +              "dwMaxVideoFrameSize %u; dwMaxPayloadTransferSize: %u",
> +             __func__, ctrl->bmHint,
> +             ctrl->bFormatIndex,
> +             ctrl->bFrameIndex,
> +             ctrl->dwFrameInterval,
> +             ctrl->wKeyFrameRate,
> +             ctrl->wCompQuality,
> +             ctrl->wCompWindowSize,
> +             ctrl->wDelay,
> +             ctrl->dwMaxVideoFrameSize,
> +             ctrl->dwMaxPayloadTransferSize);
> +
>       size = stream->dev->uvc_version >= 0x0110 ? 34 : 26;
>       data = kzalloc(size, GFP_KERNEL);
>       if (data == NULL)
> @@ -292,6 +334,8 @@ int uvc_probe_video(struct uvc_streaming *stream,
>       unsigned int i;
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       /* Perform probing. The device should adjust the requested values
>        * according to its capabilities. However, some devices, namely the
>        * first generation UVC Logitech webcams, don't implement the Video
> @@ -349,6 +393,7 @@ done:
>  int uvc_commit_video(struct uvc_streaming *stream,
>       struct uvc_streaming_control *probe)
>  {
> +     pr_debug("%s", __func__);
>       return uvc_set_video_ctrl(stream, probe, 0);
>  }
>  
> @@ -406,6 +451,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
> *stream,
>  {
>       __u8 fid;
>  
> +     pr_debug("%s", __func__);
> +
>       /* Sanity checks:
>        * - packet must be at least 2 bytes long
>        * - bHeaderLength value must be at least 2 bytes (see above)
> @@ -416,8 +463,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
> *stream,
>  
>       /* Skip payloads marked with the error bit ("error frames"). */
>       if (data[1] & UVC_STREAM_ERR) {
> -             uvc_trace(UVC_TRACE_FRAME, "Dropping payload (error bit "
> -                       "set).\n");
> +             pr_debug("%s: Dropping payload (error bit "
> +                       "set).", __func__);
>               return -ENODATA;
>       }
>  
> @@ -449,8 +496,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
> *stream,
>               struct timespec ts;
>  
>               if (fid == stream->last_fid) {
> -                     uvc_trace(UVC_TRACE_FRAME, "Dropping payload (out of "
> -                             "sync).\n");
> +                     pr_debug("%s: Dropping payload (out of "
> +                             "sync).", __func__);
>                       if ((stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID) &&
>                           (data[1] & UVC_STREAM_EOF))
>                               stream->last_fid ^= UVC_STREAM_FID;
> @@ -486,8 +533,8 @@ static int uvc_video_decode_start(struct uvc_streaming 
> *stream,
>        * previous payload had the EOF bit set.
>        */
>       if (fid != stream->last_fid && buf->buf.bytesused != 0) {
> -             uvc_trace(UVC_TRACE_FRAME, "Frame complete (FID bit "
> -                             "toggled).\n");
> +             pr_debug("%s: Frame complete (FID bit "
> +                             "toggled).", __func__);
>               buf->state = UVC_BUF_STATE_READY;
>               return -EAGAIN;
>       }
> @@ -504,6 +551,8 @@ static void uvc_video_decode_data(struct uvc_streaming 
> *stream,
>       unsigned int maxlen, nbytes;
>       void *mem;
>  
> +     pr_debug("%s", __func__);
> +
>       if (len <= 0)
>               return;
>  
> @@ -516,7 +565,7 @@ static void uvc_video_decode_data(struct uvc_streaming 
> *stream,
>  
>       /* Complete the current frame if the buffer size was exceeded. */
>       if (len > maxlen) {
> -             uvc_trace(UVC_TRACE_FRAME, "Frame complete (overflow).\n");
> +             pr_debug("%s: Frame complete (overflow).", __func__);
>               buf->state = UVC_BUF_STATE_READY;
>       }
>  }
> @@ -524,11 +573,14 @@ static void uvc_video_decode_data(struct uvc_streaming 
> *stream,
>  static void uvc_video_decode_end(struct uvc_streaming *stream,
>               struct uvc_buffer *buf, const __u8 *data, int len)
>  {
> +
> +     pr_debug("%s", __func__);
> +
>       /* Mark the buffer as done if the EOF marker is set. */
>       if (data[1] & UVC_STREAM_EOF && buf->buf.bytesused != 0) {
> -             uvc_trace(UVC_TRACE_FRAME, "Frame complete (EOF found).\n");
> +             pr_debug("%s: Frame complete (EOF found).", __func__);
>               if (data[0] == len)
> -                     uvc_trace(UVC_TRACE_FRAME, "EOF in empty payload.\n");
> +                     pr_debug("%s: EOF in empty payload.", __func__);
>               buf->state = UVC_BUF_STATE_READY;
>               if (stream->dev->quirks & UVC_QUIRK_STREAM_NO_FID)
>                       stream->last_fid ^= UVC_STREAM_FID;
> @@ -549,6 +601,8 @@ static void uvc_video_decode_end(struct uvc_streaming 
> *stream,
>  static int uvc_video_encode_header(struct uvc_streaming *stream,
>               struct uvc_buffer *buf, __u8 *data, int len)
>  {
> +     pr_debug("%s", __func__);
> +
>       data[0] = 2;    /* Header length */
>       data[1] = UVC_STREAM_EOH | UVC_STREAM_EOF
>               | (stream->last_fid & UVC_STREAM_FID);
> @@ -562,6 +616,8 @@ static int uvc_video_encode_data(struct uvc_streaming 
> *stream,
>       unsigned int nbytes;
>       void *mem;
>  
> +     pr_debug("%s", __func__);
> +
>       /* Copy video data to the URB buffer. */
>       mem = queue->mem + buf->buf.m.offset + queue->buf_used;
>       nbytes = min((unsigned int)len, buf->buf.bytesused - queue->buf_used);
> @@ -587,10 +643,13 @@ static void uvc_video_decode_isoc(struct urb *urb, 
> struct uvc_streaming *stream,
>       u8 *mem;
>       int ret, i;
>  
> +     pr_debug("%s", __func__);
> +
>       for (i = 0; i < urb->number_of_packets; ++i) {
>               if (urb->iso_frame_desc[i].status < 0) {
> -                     uvc_trace(UVC_TRACE_FRAME, "USB isochronous frame "
> -                             "lost (%d).\n", urb->iso_frame_desc[i].status);
> +                     pr_debug("%s: USB isochronous frame "
> +                             "lost (%d).", __func__,
> +                             urb->iso_frame_desc[i].status);
>                       /* Mark the buffer as faulty. */
>                       if (buf != NULL)
>                               buf->error = 1;
> @@ -635,6 +694,8 @@ static void uvc_video_decode_bulk(struct urb *urb, struct 
> uvc_streaming *stream,
>       u8 *mem;
>       int len, ret;
>  
> +     pr_debug("%s", __func__);
> +
>       if (urb->actual_length == 0)
>               return;
>  
> @@ -699,6 +760,8 @@ static void uvc_video_encode_bulk(struct urb *urb, struct 
> uvc_streaming *stream,
>       u8 *mem = urb->transfer_buffer;
>       int len = stream->urb_size, ret;
>  
> +     pr_debug("%s", __func__);
> +
>       if (buf == NULL) {
>               urb->transfer_buffer_length = 0;
>               return;
> @@ -744,6 +807,8 @@ static void uvc_video_complete(struct urb *urb)
>       unsigned long flags;
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       switch (urb->status) {
>       case 0:
>               break;
> @@ -783,6 +848,8 @@ static void uvc_free_urb_buffers(struct uvc_streaming 
> *stream)
>  {
>       unsigned int i;
>  
> +     pr_debug("%s", __func__);
> +
>       for (i = 0; i < UVC_URBS; ++i) {
>               if (stream->urb_buffer[i]) {
>                       usb_free_coherent(stream->dev->udev, stream->urb_size,
> @@ -811,6 +878,8 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
> *stream,
>       unsigned int npackets;
>       unsigned int i;
>  
> +     pr_debug("%s", __func__);
> +
>       /* Buffers are already allocated, bail out. */
>       if (stream->urb_size)
>               return stream->urb_size / psize;
> @@ -836,15 +905,15 @@ static int uvc_alloc_urb_buffers(struct uvc_streaming 
> *stream,
>               }
>  
>               if (i == UVC_URBS) {
> -                     uvc_trace(UVC_TRACE_VIDEO, "Allocated %u URB buffers "
> -                             "of %ux%u bytes each.\n", UVC_URBS, npackets,
> -                             psize);
> +                     pr_debug("%s: Allocated %u URB buffers "
> +                             "of %ux%u bytes each.", __func__,
> +                             UVC_URBS, npackets, psize);
>                       return npackets;
>               }
>       }
>  
> -     uvc_trace(UVC_TRACE_VIDEO, "Failed to allocate URB buffers (%u bytes "
> -             "per packet).\n", psize);
> +     pr_debug("%s: Failed to allocate URB buffers (%u bytes "
> +             "per packet).", __func__, psize);
>       return 0;
>  }
>  
> @@ -856,6 +925,8 @@ static void uvc_uninit_video(struct uvc_streaming 
> *stream, int free_buffers)
>       struct urb *urb;
>       unsigned int i;
>  
> +     pr_debug("%s", __func__);
> +
>       for (i = 0; i < UVC_URBS; ++i) {
>               urb = stream->urb[i];
>               if (urb == NULL)
> @@ -882,6 +953,8 @@ static int uvc_init_video_isoc(struct uvc_streaming 
> *stream,
>       u16 psize;
>       u32 size;
>  
> +     pr_debug("%s", __func__);
> +
>       psize = le16_to_cpu(ep->desc.wMaxPacketSize);
>       psize = (psize & 0x07ff) * (1 + ((psize >> 11) & 3));
>       size = stream->ctrl.dwMaxVideoFrameSize;
> @@ -934,6 +1007,8 @@ static int uvc_init_video_bulk(struct uvc_streaming 
> *stream,
>       u16 psize;
>       u32 size;
>  
> +     pr_debug("%s", __func__);
> +
>       psize = le16_to_cpu(ep->desc.wMaxPacketSize) & 0x07ff;
>       size = stream->ctrl.dwMaxPayloadTransferSize;
>       stream->bulk.max_payload_size = size;
> @@ -983,6 +1058,8 @@ static int uvc_init_video(struct uvc_streaming *stream, 
> gfp_t gfp_flags)
>       unsigned int i;
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       stream->sequence = -1;
>       stream->last_fid = -1;
>       stream->bulk.header_size = 0;
> @@ -1000,12 +1077,12 @@ static int uvc_init_video(struct uvc_streaming 
> *stream, gfp_t gfp_flags)
>               bandwidth = stream->ctrl.dwMaxPayloadTransferSize;
>  
>               if (bandwidth == 0) {
> -                     uvc_trace(UVC_TRACE_VIDEO, "Device requested null "
> -                             "bandwidth, defaulting to lowest.\n");
> +                     pr_debug("%s: Device requested null "
> +                             "bandwidth, defaulting to lowest.", __func__);
>                       bandwidth = 1;
>               } else {
> -                     uvc_trace(UVC_TRACE_VIDEO, "Device requested %u "
> -                             "B/frame bandwidth.\n", bandwidth);
> +                     pr_debug("%s: Device requested %u "
> +                             "B/frame bandwidth.", __func__, bandwidth);
>               }
>  
>               for (i = 0; i < intf->num_altsetting; ++i) {
> @@ -1029,13 +1106,14 @@ static int uvc_init_video(struct uvc_streaming 
> *stream, gfp_t gfp_flags)
>               }
>  
>               if (best_ep == NULL) {
> -                     uvc_trace(UVC_TRACE_VIDEO, "No fast enough alt setting "
> -                             "for requested bandwidth.\n");
> +                     pr_debug("%s: No fast enough alt setting "
> +                             "for requested bandwidth.", __func__);
>                       return -EIO;
>               }
>  
> -             uvc_trace(UVC_TRACE_VIDEO, "Selecting alternate setting %u "
> -                     "(%u B/frame bandwidth).\n", altsetting, best_psize);
> +             pr_debug("%s: Selecting alternate setting %u "
> +                     "(%u B/frame bandwidth).", __func__,
> +                     altsetting, best_psize);
>  
>               ret = usb_set_interface(stream->dev->udev, intfnum, altsetting);
>               if (ret < 0)
> @@ -1082,6 +1160,9 @@ static int uvc_init_video(struct uvc_streaming *stream, 
> gfp_t gfp_flags)
>   */
>  int uvc_video_suspend(struct uvc_streaming *stream)
>  {
> +
> +     pr_debug("%s", __func__);
> +
>       if (!uvc_queue_streaming(&stream->queue))
>               return 0;
>  
> @@ -1103,6 +1184,8 @@ int uvc_video_resume(struct uvc_streaming *stream)
>  {
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       stream->frozen = 0;
>  
>       ret = uvc_commit_video(stream, &stream->ctrl);
> @@ -1143,6 +1226,8 @@ int uvc_video_init(struct uvc_streaming *stream)
>       unsigned int i;
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       if (stream->nformats == 0) {
>               uvc_printk(KERN_INFO, "No supported video formats found.\n");
>               return -EINVAL;
> @@ -1237,6 +1322,8 @@ int uvc_video_enable(struct uvc_streaming *stream, int 
> enable)
>  {
>       int ret;
>  
> +     pr_debug("%s", __func__);
> +
>       if (!enable) {
>               uvc_uninit_video(stream, 1);
>               usb_set_interface(stream->dev->udev, stream->intfnum, 0);


_______________________________________________
Linux-uvc-devel mailing list
Linux-uvc-devel@lists.berlios.de
https://lists.berlios.de/mailman/listinfo/linux-uvc-devel

Reply via email to