V4L/DVB: vivi: remove BKL
authorHans Verkuil <hverkuil@xs4all.nl>
Mon, 20 Sep 2010 21:25:55 +0000 (18:25 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Oct 2010 03:06:15 +0000 (01:06 -0200)
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/vivi.c

index 547f5e546c9c66a5293e03a212c5103c89730f87..9797e5a69265a11cdd18fb9f5c9ddc704e6d2bbc 100644 (file)
@@ -820,14 +820,11 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
                                        struct v4l2_format *f)
 {
        struct vivi_dev *dev = video_drvdata(file);
-       struct videobuf_queue *q = &dev->vb_vidq;
 
        int ret = vidioc_try_fmt_vid_cap(file, priv, f);
        if (ret < 0)
                return ret;
 
-       mutex_lock(&q->vb_lock);
-
        if (vivi_is_generating(dev)) {
                dprintk(dev, 1, "%s device busy\n", __func__);
                ret = -EBUSY;
@@ -840,7 +837,6 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
        dev->vb_vidq.field = f->fmt.pix.field;
        ret = 0;
 out:
-       mutex_unlock(&q->vb_lock);
        return ret;
 }
 
@@ -1086,7 +1082,7 @@ static const struct v4l2_file_operations vivi_fops = {
        .release        = vivi_close,
        .read           = vivi_read,
        .poll           = vivi_poll,
-       .ioctl          = video_ioctl2, /* V4L2 ioctl handler */
+       .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */
        .mmap           = vivi_mmap,
 };
 
@@ -1173,19 +1169,19 @@ static int __init vivi_create_instance(int inst)
        dev->saturation = 127;
        dev->hue = 0;
 
+       /* initialize locks */
+       spin_lock_init(&dev->slock);
+       mutex_init(&dev->mutex);
+
        videobuf_queue_vmalloc_init(&dev->vb_vidq, &vivi_video_qops,
                        NULL, &dev->slock, V4L2_BUF_TYPE_VIDEO_CAPTURE,
                        V4L2_FIELD_INTERLACED,
-                       sizeof(struct vivi_buffer), dev, NULL);
+                       sizeof(struct vivi_buffer), dev, &dev->mutex);
 
        /* init video dma queues */
        INIT_LIST_HEAD(&dev->vidq.active);
        init_waitqueue_head(&dev->vidq.wq);
 
-       /* initialize locks */
-       spin_lock_init(&dev->slock);
-       mutex_init(&dev->mutex);
-
        ret = -ENOMEM;
        vfd = video_device_alloc();
        if (!vfd)
@@ -1194,6 +1190,7 @@ static int __init vivi_create_instance(int inst)
        *vfd = vivi_template;
        vfd->debug = debug;
        vfd->v4l2_dev = &dev->v4l2_dev;
+       vfd->lock = &dev->mutex;
 
        ret = video_register_device(vfd, VFL_TYPE_GRABBER, video_nr);
        if (ret < 0)