提交 18bcbcfe 编写于 作者: D Daniel Walker 提交者: Greg Kroah-Hartman

USB: misc: legousbtower: semaphore to mutex

The dev->sem conforms to mutex style usage. This patch converts it to use
the struct mutex type, and new API.

There is also a small style fix around this comment,

/* unlock here as tower_delete frees dev */

Where I broke the line up to meet the 80 char limit.
Signed-off-by: NDaniel Walker <dwalker@mvista.com>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 da0e8fb0
...@@ -205,7 +205,7 @@ static DEFINE_MUTEX(open_disc_mutex); ...@@ -205,7 +205,7 @@ static DEFINE_MUTEX(open_disc_mutex);
/* Structure to hold all of our device specific stuff */ /* Structure to hold all of our device specific stuff */
struct lego_usb_tower { struct lego_usb_tower {
struct semaphore sem; /* locks this structure */ struct mutex lock; /* locks this structure */
struct usb_device* udev; /* save off the usb device pointer */ struct usb_device* udev; /* save off the usb device pointer */
unsigned char minor; /* the starting minor number for this device */ unsigned char minor; /* the starting minor number for this device */
...@@ -361,7 +361,7 @@ static int tower_open (struct inode *inode, struct file *file) ...@@ -361,7 +361,7 @@ static int tower_open (struct inode *inode, struct file *file)
} }
/* lock this device */ /* lock this device */
if (down_interruptible (&dev->sem)) { if (mutex_lock_interruptible(&dev->lock)) {
mutex_unlock(&open_disc_mutex); mutex_unlock(&open_disc_mutex);
retval = -ERESTARTSYS; retval = -ERESTARTSYS;
goto exit; goto exit;
...@@ -421,7 +421,7 @@ static int tower_open (struct inode *inode, struct file *file) ...@@ -421,7 +421,7 @@ static int tower_open (struct inode *inode, struct file *file)
file->private_data = dev; file->private_data = dev;
unlock_exit: unlock_exit:
up (&dev->sem); mutex_unlock(&dev->lock);
exit: exit:
dbg(2, "%s: leave, return value %d ", __FUNCTION__, retval); dbg(2, "%s: leave, return value %d ", __FUNCTION__, retval);
...@@ -448,7 +448,7 @@ static int tower_release (struct inode *inode, struct file *file) ...@@ -448,7 +448,7 @@ static int tower_release (struct inode *inode, struct file *file)
} }
mutex_lock(&open_disc_mutex); mutex_lock(&open_disc_mutex);
if (down_interruptible (&dev->sem)) { if (mutex_lock_interruptible(&dev->lock)) {
retval = -ERESTARTSYS; retval = -ERESTARTSYS;
goto exit; goto exit;
} }
...@@ -460,7 +460,9 @@ static int tower_release (struct inode *inode, struct file *file) ...@@ -460,7 +460,9 @@ static int tower_release (struct inode *inode, struct file *file)
} }
if (dev->udev == NULL) { if (dev->udev == NULL) {
/* the device was unplugged before the file was released */ /* the device was unplugged before the file was released */
up (&dev->sem); /* unlock here as tower_delete frees dev */
/* unlock here as tower_delete frees dev */
mutex_unlock(&dev->lock);
tower_delete (dev); tower_delete (dev);
goto exit; goto exit;
} }
...@@ -473,7 +475,7 @@ static int tower_release (struct inode *inode, struct file *file) ...@@ -473,7 +475,7 @@ static int tower_release (struct inode *inode, struct file *file)
dev->open_count = 0; dev->open_count = 0;
unlock_exit: unlock_exit:
up (&dev->sem); mutex_unlock(&dev->lock);
exit: exit:
mutex_unlock(&open_disc_mutex); mutex_unlock(&open_disc_mutex);
...@@ -586,7 +588,7 @@ static ssize_t tower_read (struct file *file, char __user *buffer, size_t count, ...@@ -586,7 +588,7 @@ static ssize_t tower_read (struct file *file, char __user *buffer, size_t count,
dev = (struct lego_usb_tower *)file->private_data; dev = (struct lego_usb_tower *)file->private_data;
/* lock this object */ /* lock this object */
if (down_interruptible (&dev->sem)) { if (mutex_lock_interruptible(&dev->lock)) {
retval = -ERESTARTSYS; retval = -ERESTARTSYS;
goto exit; goto exit;
} }
...@@ -653,7 +655,7 @@ static ssize_t tower_read (struct file *file, char __user *buffer, size_t count, ...@@ -653,7 +655,7 @@ static ssize_t tower_read (struct file *file, char __user *buffer, size_t count,
unlock_exit: unlock_exit:
/* unlock the device */ /* unlock the device */
up (&dev->sem); mutex_unlock(&dev->lock);
exit: exit:
dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
...@@ -675,7 +677,7 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t ...@@ -675,7 +677,7 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t
dev = (struct lego_usb_tower *)file->private_data; dev = (struct lego_usb_tower *)file->private_data;
/* lock this object */ /* lock this object */
if (down_interruptible (&dev->sem)) { if (mutex_lock_interruptible(&dev->lock)) {
retval = -ERESTARTSYS; retval = -ERESTARTSYS;
goto exit; goto exit;
} }
...@@ -737,7 +739,7 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t ...@@ -737,7 +739,7 @@ static ssize_t tower_write (struct file *file, const char __user *buffer, size_t
unlock_exit: unlock_exit:
/* unlock the device */ /* unlock the device */
up (&dev->sem); mutex_unlock(&dev->lock);
exit: exit:
dbg(2, "%s: leave, return value %d", __FUNCTION__, retval); dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
...@@ -862,7 +864,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device ...@@ -862,7 +864,7 @@ static int tower_probe (struct usb_interface *interface, const struct usb_device
goto exit; goto exit;
} }
init_MUTEX (&dev->sem); mutex_init(&dev->lock);
dev->udev = udev; dev->udev = udev;
dev->open_count = 0; dev->open_count = 0;
...@@ -1007,16 +1009,16 @@ static void tower_disconnect (struct usb_interface *interface) ...@@ -1007,16 +1009,16 @@ static void tower_disconnect (struct usb_interface *interface)
/* give back our minor */ /* give back our minor */
usb_deregister_dev (interface, &tower_class); usb_deregister_dev (interface, &tower_class);
down (&dev->sem); mutex_lock(&dev->lock);
mutex_unlock(&open_disc_mutex); mutex_unlock(&open_disc_mutex);
/* if the device is not opened, then we clean up right now */ /* if the device is not opened, then we clean up right now */
if (!dev->open_count) { if (!dev->open_count) {
up (&dev->sem); mutex_unlock(&dev->lock);
tower_delete (dev); tower_delete (dev);
} else { } else {
dev->udev = NULL; dev->udev = NULL;
up (&dev->sem); mutex_unlock(&dev->lock);
} }
info("LEGO USB Tower #%d now disconnected", (minor - LEGO_USB_TOWER_MINOR_BASE)); info("LEGO USB Tower #%d now disconnected", (minor - LEGO_USB_TOWER_MINOR_BASE));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册