Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18bcbcfe authored by Daniel Walker's avatar Daniel Walker Committed by Greg Kroah-Hartman
Browse files

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: default avatarDaniel Walker <dwalker@mvista.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent da0e8fb0
Loading
Loading
Loading
Loading
+16 −14
Original line number Original line Diff line number Diff line
@@ -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)
	}
	}


	/* 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)
	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)
	}
	}


	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)
	}
	}
	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)
	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,
	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,


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
	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


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
		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)
	/* 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));