V4L/DVB: radio-si470x: remove the BKL lock used internally at the driver
Mauro Carvalho Chehab [Tue, 14 Sep 2010 12:56:22 +0000 (09:56 -0300)]
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

drivers/media/radio/si470x/radio-si470x-usb.c
drivers/media/radio/si470x/radio-si470x.h

index 5ec13e5..392e84f 100644 (file)
@@ -517,7 +517,7 @@ int si470x_fops_open(struct file *file)
        struct si470x_device *radio = video_drvdata(file);
        int retval;
 
-       lock_kernel();
+       mutex_lock(&radio->lock);
        radio->users++;
 
        retval = usb_autopm_get_interface(radio->intf);
@@ -558,7 +558,7 @@ int si470x_fops_open(struct file *file)
        }
 
 done:
-       unlock_kernel();
+       mutex_unlock(&radio->lock);
        return retval;
 }
 
@@ -577,7 +577,7 @@ int si470x_fops_release(struct file *file)
                goto done;
        }
 
-       mutex_lock(&radio->disconnect_lock);
+       mutex_lock(&radio->lock);
        radio->users--;
        if (radio->users == 0) {
                /* shutdown interrupt handler */
@@ -591,7 +591,7 @@ int si470x_fops_release(struct file *file)
                        video_unregister_device(radio->videodev);
                        kfree(radio->int_in_buffer);
                        kfree(radio->buffer);
-                       mutex_unlock(&radio->disconnect_lock);
+                       mutex_unlock(&radio->lock);
                        kfree(radio);
                        goto done;
                }
@@ -603,7 +603,7 @@ int si470x_fops_release(struct file *file)
                retval = si470x_stop(radio);
                usb_autopm_put_interface(radio->intf);
        }
-       mutex_unlock(&radio->disconnect_lock);
+       mutex_unlock(&radio->lock);
 done:
        return retval;
 }
@@ -661,7 +661,6 @@ static int si470x_usb_driver_probe(struct usb_interface *intf,
        radio->disconnected = 0;
        radio->usbdev = interface_to_usbdev(intf);
        radio->intf = intf;
-       mutex_init(&radio->disconnect_lock);
        mutex_init(&radio->lock);
 
        iface_desc = intf->cur_altsetting;
@@ -830,7 +829,7 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf)
 {
        struct si470x_device *radio = usb_get_intfdata(intf);
 
-       mutex_lock(&radio->disconnect_lock);
+       mutex_lock(&radio->lock);
        radio->disconnected = 1;
        usb_set_intfdata(intf, NULL);
        if (radio->users == 0) {
@@ -843,10 +842,10 @@ static void si470x_usb_driver_disconnect(struct usb_interface *intf)
                kfree(radio->int_in_buffer);
                video_unregister_device(radio->videodev);
                kfree(radio->buffer);
-               mutex_unlock(&radio->disconnect_lock);
+               mutex_unlock(&radio->lock);
                kfree(radio);
        } else {
-               mutex_unlock(&radio->disconnect_lock);
+               mutex_unlock(&radio->lock);
        }
 }
 
index 3cd0a29..d3d86ba 100644 (file)
@@ -177,7 +177,6 @@ struct si470x_device {
 
        /* driver management */
        unsigned char disconnected;
-       struct mutex disconnect_lock;
 #endif
 
 #if defined(CONFIG_I2C_SI470X) || defined(CONFIG_I2C_SI470X_MODULE)