On Wednesday 18 November 2009 01:38:48 Laurent Pinchart wrote:
> Fix all device drivers to use the video_drvdata function instead of
> maintaining a local list of minor to private data mappings. Call
> video_set_drvdata to register the driver private pointer when not
> already done.
> 
> Where applicable, the local list of mappings is completely removed when
> it becomes unused.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>

Very nice cleanup!

But you need to check the lock_kernel calls carefully, I think one is now
unbalanced:

> Index: v4l-dvb-mc-uvc/linux/drivers/media/video/cx88/cx88-video.c
> ===================================================================
> --- v4l-dvb-mc-uvc.orig/linux/drivers/media/video/cx88/cx88-video.c
> +++ v4l-dvb-mc-uvc/linux/drivers/media/video/cx88/cx88-video.c
> @@ -76,10 +76,6 @@ MODULE_PARM_DESC(vid_limit,"capture memo
>  #define dprintk(level,fmt, arg...)   if (video_debug >= level) \
>       printk(KERN_DEBUG "%s/0: " fmt, core->name , ## arg)
>  
> -/* ------------------------------------------------------------------ */
> -
> -static LIST_HEAD(cx8800_devlist);
> -
>  /* ------------------------------------------------------------------- */
>  /* static data                                                         */
>  
> @@ -980,31 +976,23 @@ static int get_ressource(struct cx8800_f
>  static int video_open(struct file *file)
>  {
>       int minor = video_devdata(file)->minor;
> -     struct cx8800_dev *h,*dev = NULL;
> +     struct video_device *vdev = video_devdata(file);
> +     struct cx8800_dev *dev = video_drvdata(file);
>       struct cx88_core *core;
>       struct cx8800_fh *fh;
>       enum v4l2_buf_type type = 0;
>       int radio = 0;
>  
> -     lock_kernel();

Lock is removed.

> -     list_for_each_entry(h, &cx8800_devlist, devlist) {
> -             if (h->video_dev->minor == minor) {
> -                     dev  = h;
> -                     type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
> -             }
> -             if (h->vbi_dev->minor == minor) {
> -                     dev  = h;
> -                     type = V4L2_BUF_TYPE_VBI_CAPTURE;
> -             }
> -             if (h->radio_dev &&
> -                 h->radio_dev->minor == minor) {
> -                     radio = 1;
> -                     dev   = h;
> -             }
> -     }
> -     if (NULL == dev) {
> -             unlock_kernel();
> -             return -ENODEV;
> +     switch (vdev->vfl_type) {
> +     case VFL_TYPE_GRABBER:
> +             type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
> +             break;
> +     case VFL_TYPE_VBI:
> +             type = V4L2_BUF_TYPE_VBI_CAPTURE;
> +             break;
> +     case VFL_TYPE_RADIO:
> +             radio = 1;
> +             break;
>       }

But not added here. And I assume there is an unlock at the end of this
function as well.

Regards,

        Hans

-- 
Hans Verkuil - video4linux developer - sponsored by TANDBERG Telecom
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to