diff options
author | Matthias Kaehlcke <matthias.kaehlcke@gmail.com> | 2007-07-13 15:28:31 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2007-07-19 20:46:03 -0400 |
commit | 8293c568b25611cdc4ac54ded438d8d7938c593c (patch) | |
tree | 0aab0b1031fdbe247d1eee674c2d617da63f7012 /drivers/usb/misc/adutux.c | |
parent | d2066eb659e6ee915383510c136da38eff86ef15 (diff) |
USB: use mutex instead of semaphore in the Adutux driver
The Adutux driver uses a semaphore as mutex. Use the mutex API
instead of the (binary) semaphore.
Signed-off-by: Matthias Kaehlcke <matthias.kaehlcke@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/misc/adutux.c')
-rw-r--r-- | drivers/usb/misc/adutux.c | 35 |
1 files changed, 18 insertions, 17 deletions
diff --git a/drivers/usb/misc/adutux.c b/drivers/usb/misc/adutux.c index d72c42e5f22d..274d08ecf291 100644 --- a/drivers/usb/misc/adutux.c +++ b/drivers/usb/misc/adutux.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/slab.h> | 24 | #include <linux/slab.h> |
25 | #include <linux/module.h> | 25 | #include <linux/module.h> |
26 | #include <linux/usb.h> | 26 | #include <linux/usb.h> |
27 | #include <linux/mutex.h> | ||
27 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
28 | 29 | ||
29 | #ifdef CONFIG_USB_DEBUG | 30 | #ifdef CONFIG_USB_DEBUG |
@@ -80,7 +81,7 @@ MODULE_DEVICE_TABLE(usb, device_table); | |||
80 | 81 | ||
81 | /* Structure to hold all of our device specific stuff */ | 82 | /* Structure to hold all of our device specific stuff */ |
82 | struct adu_device { | 83 | struct adu_device { |
83 | struct semaphore sem; /* locks this structure */ | 84 | struct mutex mtx; /* locks this structure */ |
84 | struct usb_device* udev; /* save off the usb device pointer */ | 85 | struct usb_device* udev; /* save off the usb device pointer */ |
85 | struct usb_interface* interface; | 86 | struct usb_interface* interface; |
86 | unsigned char minor; /* the starting minor number for this device */ | 87 | unsigned char minor; /* the starting minor number for this device */ |
@@ -269,8 +270,8 @@ static int adu_open(struct inode *inode, struct file *file) | |||
269 | } | 270 | } |
270 | 271 | ||
271 | /* lock this device */ | 272 | /* lock this device */ |
272 | if ((retval = down_interruptible(&dev->sem))) { | 273 | if ((retval = mutex_lock_interruptible(&dev->mtx))) { |
273 | dbg(2, "%s : sem down failed", __FUNCTION__); | 274 | dbg(2, "%s : mutex lock failed", __FUNCTION__); |
274 | goto exit_no_device; | 275 | goto exit_no_device; |
275 | } | 276 | } |
276 | 277 | ||
@@ -299,7 +300,7 @@ static int adu_open(struct inode *inode, struct file *file) | |||
299 | if (retval) | 300 | if (retval) |
300 | --dev->open_count; | 301 | --dev->open_count; |
301 | } | 302 | } |
302 | up(&dev->sem); | 303 | mutex_unlock(&dev->mtx); |
303 | 304 | ||
304 | exit_no_device: | 305 | exit_no_device: |
305 | dbg(2,"%s : leave, return value %d ", __FUNCTION__, retval); | 306 | dbg(2,"%s : leave, return value %d ", __FUNCTION__, retval); |
@@ -347,7 +348,7 @@ static int adu_release(struct inode *inode, struct file *file) | |||
347 | } | 348 | } |
348 | 349 | ||
349 | /* lock our device */ | 350 | /* lock our device */ |
350 | down(&dev->sem); /* not interruptible */ | 351 | mutex_lock(&dev->mtx); /* not interruptible */ |
351 | 352 | ||
352 | if (dev->open_count <= 0) { | 353 | if (dev->open_count <= 0) { |
353 | dbg(1," %s : device not opened", __FUNCTION__); | 354 | dbg(1," %s : device not opened", __FUNCTION__); |
@@ -357,7 +358,7 @@ static int adu_release(struct inode *inode, struct file *file) | |||
357 | 358 | ||
358 | if (dev->udev == NULL) { | 359 | if (dev->udev == NULL) { |
359 | /* the device was unplugged before the file was released */ | 360 | /* the device was unplugged before the file was released */ |
360 | up(&dev->sem); | 361 | mutex_unlock(&dev->mtx); |
361 | adu_delete(dev); | 362 | adu_delete(dev); |
362 | dev = NULL; | 363 | dev = NULL; |
363 | } else { | 364 | } else { |
@@ -367,7 +368,7 @@ static int adu_release(struct inode *inode, struct file *file) | |||
367 | 368 | ||
368 | exit: | 369 | exit: |
369 | if (dev) | 370 | if (dev) |
370 | up(&dev->sem); | 371 | mutex_unlock(&dev->mtx); |
371 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); | 372 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); |
372 | return retval; | 373 | return retval; |
373 | } | 374 | } |
@@ -390,7 +391,7 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count, | |||
390 | dev = file->private_data; | 391 | dev = file->private_data; |
391 | dbg(2," %s : dev=%p", __FUNCTION__, dev); | 392 | dbg(2," %s : dev=%p", __FUNCTION__, dev); |
392 | /* lock this object */ | 393 | /* lock this object */ |
393 | if (down_interruptible(&dev->sem)) | 394 | if (mutex_lock_interruptible(&dev->mtx)) |
394 | return -ERESTARTSYS; | 395 | return -ERESTARTSYS; |
395 | 396 | ||
396 | /* verify that the device wasn't unplugged */ | 397 | /* verify that the device wasn't unplugged */ |
@@ -522,7 +523,7 @@ static ssize_t adu_read(struct file *file, __user char *buffer, size_t count, | |||
522 | 523 | ||
523 | exit: | 524 | exit: |
524 | /* unlock the device */ | 525 | /* unlock the device */ |
525 | up(&dev->sem); | 526 | mutex_unlock(&dev->mtx); |
526 | 527 | ||
527 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); | 528 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); |
528 | return retval; | 529 | return retval; |
@@ -543,7 +544,7 @@ static ssize_t adu_write(struct file *file, const __user char *buffer, | |||
543 | dev = file->private_data; | 544 | dev = file->private_data; |
544 | 545 | ||
545 | /* lock this object */ | 546 | /* lock this object */ |
546 | retval = down_interruptible(&dev->sem); | 547 | retval = mutex_lock_interruptible(&dev->mtx); |
547 | if (retval) | 548 | if (retval) |
548 | goto exit_nolock; | 549 | goto exit_nolock; |
549 | 550 | ||
@@ -571,9 +572,9 @@ static ssize_t adu_write(struct file *file, const __user char *buffer, | |||
571 | retval = -EINTR; | 572 | retval = -EINTR; |
572 | goto exit; | 573 | goto exit; |
573 | } | 574 | } |
574 | up(&dev->sem); | 575 | mutex_unlock(&dev->mtx); |
575 | timeout = interruptible_sleep_on_timeout(&dev->write_wait, timeout); | 576 | timeout = interruptible_sleep_on_timeout(&dev->write_wait, timeout); |
576 | retval = down_interruptible(&dev->sem); | 577 | retval = mutex_lock_interruptible(&dev->mtx); |
577 | if (retval) { | 578 | if (retval) { |
578 | retval = bytes_written ? bytes_written : retval; | 579 | retval = bytes_written ? bytes_written : retval; |
579 | goto exit_nolock; | 580 | goto exit_nolock; |
@@ -638,7 +639,7 @@ static ssize_t adu_write(struct file *file, const __user char *buffer, | |||
638 | 639 | ||
639 | exit: | 640 | exit: |
640 | /* unlock the device */ | 641 | /* unlock the device */ |
641 | up(&dev->sem); | 642 | mutex_unlock(&dev->mtx); |
642 | exit_nolock: | 643 | exit_nolock: |
643 | 644 | ||
644 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); | 645 | dbg(2," %s : leave, return value %d", __FUNCTION__, retval); |
@@ -698,7 +699,7 @@ static int adu_probe(struct usb_interface *interface, | |||
698 | goto exit; | 699 | goto exit; |
699 | } | 700 | } |
700 | 701 | ||
701 | init_MUTEX(&dev->sem); | 702 | mutex_init(&dev->mtx); |
702 | spin_lock_init(&dev->buflock); | 703 | spin_lock_init(&dev->buflock); |
703 | dev->udev = udev; | 704 | dev->udev = udev; |
704 | init_waitqueue_head(&dev->read_wait); | 705 | init_waitqueue_head(&dev->read_wait); |
@@ -835,16 +836,16 @@ static void adu_disconnect(struct usb_interface *interface) | |||
835 | usb_deregister_dev(interface, &adu_class); | 836 | usb_deregister_dev(interface, &adu_class); |
836 | dev->minor = 0; | 837 | dev->minor = 0; |
837 | 838 | ||
838 | down(&dev->sem); /* not interruptible */ | 839 | mutex_lock(&dev->mtx); /* not interruptible */ |
839 | 840 | ||
840 | /* if the device is not opened, then we clean up right now */ | 841 | /* if the device is not opened, then we clean up right now */ |
841 | dbg(2," %s : open count %d", __FUNCTION__, dev->open_count); | 842 | dbg(2," %s : open count %d", __FUNCTION__, dev->open_count); |
842 | if (!dev->open_count) { | 843 | if (!dev->open_count) { |
843 | up(&dev->sem); | 844 | mutex_unlock(&dev->mtx); |
844 | adu_delete(dev); | 845 | adu_delete(dev); |
845 | } else { | 846 | } else { |
846 | dev->udev = NULL; | 847 | dev->udev = NULL; |
847 | up(&dev->sem); | 848 | mutex_unlock(&dev->mtx); |
848 | } | 849 | } |
849 | 850 | ||
850 | dev_info(&interface->dev, "ADU device adutux%d now disconnected", | 851 | dev_info(&interface->dev, "ADU device adutux%d now disconnected", |