V4L/DVB: cx88: Remove BKL
Mauro Carvalho Chehab [Wed, 15 Sep 2010 12:23:20 +0000 (09:23 -0300)]
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

drivers/media/video/cx88/cx88-blackbird.c
drivers/media/video/cx88/cx88-video.c

index e46e1ce..ec32995 100644 (file)
@@ -1057,7 +1057,7 @@ static int mpeg_open(struct file *file)
 
        dprintk( 1, "%s\n", __func__);
 
-       lock_kernel();
+       mutex_lock(&dev->core->lock);
 
        /* Make sure we can acquire the hardware */
        drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
@@ -1065,7 +1065,7 @@ static int mpeg_open(struct file *file)
                err = drv->request_acquire(drv);
                if(err != 0) {
                        dprintk(1,"%s: Unable to acquire hardware, %d\n", __func__, err);
-                       unlock_kernel();
+                       mutex_unlock(&dev->core->lock);;
                        return err;
                }
        }
@@ -1073,7 +1073,7 @@ static int mpeg_open(struct file *file)
        if (!atomic_read(&dev->core->mpeg_users) && blackbird_initialize_codec(dev) < 0) {
                if (drv)
                        drv->request_release(drv);
-               unlock_kernel();
+               mutex_unlock(&dev->core->lock);
                return -EINVAL;
        }
        dprintk(1, "open dev=%s\n", video_device_node_name(vdev));
@@ -1083,7 +1083,7 @@ static int mpeg_open(struct file *file)
        if (NULL == fh) {
                if (drv)
                        drv->request_release(drv);
-               unlock_kernel();
+               mutex_unlock(&dev->core->lock);
                return -ENOMEM;
        }
        file->private_data = fh;
@@ -1099,10 +1099,9 @@ static int mpeg_open(struct file *file)
        /* FIXME: locking against other video device */
        cx88_set_scale(dev->core, dev->width, dev->height,
                        fh->mpegq.field);
-       unlock_kernel();
 
        atomic_inc(&dev->core->mpeg_users);
-
+       mutex_unlock(&dev->core->lock);
        return 0;
 }
 
@@ -1120,8 +1119,11 @@ static int mpeg_release(struct file *file)
        videobuf_stop(&fh->mpegq);
 
        videobuf_mmap_free(&fh->mpegq);
+
+       mutex_lock(&dev->core->lock);
        file->private_data = NULL;
        kfree(fh);
+       mutex_unlock(&dev->core->lock);
 
        /* Make sure we release the hardware */
        drv = cx8802_get_driver(dev, CX88_MPEG_BLACKBIRD);
index b755bf1..2da9117 100644 (file)
@@ -769,19 +769,14 @@ static int video_open(struct file *file)
                break;
        }
 
-       lock_kernel();
-
-       core = dev->core;
-
        dprintk(1, "open dev=%s radio=%d type=%s\n",
                video_device_node_name(vdev), radio, v4l2_type_names[type]);
 
        /* allocate + initialize per filehandle data */
        fh = kzalloc(sizeof(*fh),GFP_KERNEL);
-       if (NULL == fh) {
-               unlock_kernel();
+       if (unlikely(!fh))
                return -ENOMEM;
-       }
+
        file->private_data = fh;
        fh->dev      = dev;
        fh->radio    = radio;
@@ -790,6 +785,9 @@ static int video_open(struct file *file)
        fh->height   = 240;
        fh->fmt      = format_by_fourcc(V4L2_PIX_FMT_BGR24);
 
+       mutex_lock(&core->lock);
+       core = dev->core;
+
        videobuf_queue_sg_init(&fh->vidq, &cx8800_video_qops,
                            &dev->pci->dev, &dev->slock,
                            V4L2_BUF_TYPE_VIDEO_CAPTURE,
@@ -826,9 +824,9 @@ static int video_open(struct file *file)
                }
                call_all(core, tuner, s_radio);
        }
-       unlock_kernel();
 
        atomic_inc(&core->users);
+       mutex_unlock(&core->lock);
 
        return 0;
 }
@@ -920,10 +918,11 @@ static int video_release(struct file *file)
 
        videobuf_mmap_free(&fh->vidq);
        videobuf_mmap_free(&fh->vbiq);
+
+       mutex_lock(&dev->core->lock);
        file->private_data = NULL;
        kfree(fh);
 
-       mutex_lock(&dev->core->lock);
        if(atomic_dec_and_test(&dev->core->users))
                call_all(dev->core, core, s_power, 0);
        mutex_unlock(&dev->core->lock);