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 <[email protected]>
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html