mirror of https://gitee.com/openkylin/linux.git
usb: ldusb: ld_usb semaphore to mutex
Signed-off-by: Daniel Walker <dwalker@mvista.com> Acked-by: Matthew Wilcox <willy@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
db11e47dd7
commit
ce0d7d3f57
|
@ -148,7 +148,7 @@ MODULE_PARM_DESC(min_interrupt_out_interval, "Minimum interrupt out interval in
|
|||
|
||||
/* Structure to hold all of our device specific stuff */
|
||||
struct ld_usb {
|
||||
struct semaphore sem; /* locks this structure */
|
||||
struct mutex mutex; /* locks this structure */
|
||||
struct usb_interface* intf; /* save off the usb interface pointer */
|
||||
|
||||
int open_count; /* number of times this port has been opened */
|
||||
|
@ -319,7 +319,7 @@ static int ld_usb_open(struct inode *inode, struct file *file)
|
|||
return -ENODEV;
|
||||
|
||||
/* lock this device */
|
||||
if (down_interruptible(&dev->sem))
|
||||
if (mutex_lock_interruptible(&dev->mutex))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
/* allow opening only once */
|
||||
|
@ -358,7 +358,7 @@ static int ld_usb_open(struct inode *inode, struct file *file)
|
|||
file->private_data = dev;
|
||||
|
||||
unlock_exit:
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
@ -378,7 +378,7 @@ static int ld_usb_release(struct inode *inode, struct file *file)
|
|||
goto exit;
|
||||
}
|
||||
|
||||
if (down_interruptible(&dev->sem)) {
|
||||
if (mutex_lock_interruptible(&dev->mutex)) {
|
||||
retval = -ERESTARTSYS;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -389,7 +389,7 @@ static int ld_usb_release(struct inode *inode, struct file *file)
|
|||
}
|
||||
if (dev->intf == NULL) {
|
||||
/* the device was unplugged before the file was released */
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
/* unlock here as ld_usb_delete frees dev */
|
||||
ld_usb_delete(dev);
|
||||
goto exit;
|
||||
|
@ -402,7 +402,7 @@ static int ld_usb_release(struct inode *inode, struct file *file)
|
|||
dev->open_count = 0;
|
||||
|
||||
unlock_exit:
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
exit:
|
||||
return retval;
|
||||
|
@ -448,7 +448,7 @@ static ssize_t ld_usb_read(struct file *file, char __user *buffer, size_t count,
|
|||
goto exit;
|
||||
|
||||
/* lock this object */
|
||||
if (down_interruptible(&dev->sem)) {
|
||||
if (mutex_lock_interruptible(&dev->mutex)) {
|
||||
retval = -ERESTARTSYS;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -505,7 +505,7 @@ static ssize_t ld_usb_read(struct file *file, char __user *buffer, size_t count,
|
|||
|
||||
unlock_exit:
|
||||
/* unlock the device */
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
exit:
|
||||
return retval;
|
||||
|
@ -528,7 +528,7 @@ static ssize_t ld_usb_write(struct file *file, const char __user *buffer,
|
|||
goto exit;
|
||||
|
||||
/* lock this object */
|
||||
if (down_interruptible(&dev->sem)) {
|
||||
if (mutex_lock_interruptible(&dev->mutex)) {
|
||||
retval = -ERESTARTSYS;
|
||||
goto exit;
|
||||
}
|
||||
|
@ -602,7 +602,7 @@ static ssize_t ld_usb_write(struct file *file, const char __user *buffer,
|
|||
|
||||
unlock_exit:
|
||||
/* unlock the device */
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
|
||||
exit:
|
||||
return retval;
|
||||
|
@ -651,7 +651,7 @@ static int ld_usb_probe(struct usb_interface *intf, const struct usb_device_id *
|
|||
dev_err(&intf->dev, "Out of memory\n");
|
||||
goto exit;
|
||||
}
|
||||
init_MUTEX(&dev->sem);
|
||||
mutex_init(&dev->mutex);
|
||||
spin_lock_init(&dev->rbsl);
|
||||
dev->intf = intf;
|
||||
init_waitqueue_head(&dev->read_wait);
|
||||
|
@ -765,15 +765,15 @@ static void ld_usb_disconnect(struct usb_interface *intf)
|
|||
/* give back our minor */
|
||||
usb_deregister_dev(intf, &ld_usb_class);
|
||||
|
||||
down(&dev->sem);
|
||||
mutex_lock(&dev->mutex);
|
||||
|
||||
/* if the device is not opened, then we clean up right now */
|
||||
if (!dev->open_count) {
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
ld_usb_delete(dev);
|
||||
} else {
|
||||
dev->intf = NULL;
|
||||
up(&dev->sem);
|
||||
mutex_unlock(&dev->mutex);
|
||||
}
|
||||
|
||||
dev_info(&intf->dev, "LD USB Device #%d now disconnected\n",
|
||||
|
|
Loading…
Reference in New Issue