Re: [PATCH 2/5] use mutex instead of semaphore in the USB gadget serial driver

David Brownell <[email protected]>
Newsgroups gmane.linux.usb.devel,gmane.linux.kernel
Message-ID <[email protected]>
On Friday 13 July 2007, Matthias Kaehlcke wrote:
> The USB gadget serial driver uses a semaphore as mutex. Use the
> mutex API instead of the (binary) semaphore.
> 
> Signed-off-by: Matthias Kaehlcke <[email protected]>

ACK (and thanks)

> 
> --
> 
> diff --git a/drivers/usb/gadget/serial.c b/drivers/usb/gadget/serial.c
> index dd33ff0..4192d24 100644
> --- a/drivers/usb/gadget/serial.c
> +++ b/drivers/usb/gadget/serial.c
> @@ -33,6 +33,7 @@
>  #include <linux/device.h>
>  #include <linux/tty.h>
>  #include <linux/tty_flip.h>
> +#include <linux/mutex.h>
>  
>  #include <asm/byteorder.h>
>  #include <asm/io.h>
> @@ -258,7 +259,7 @@ static const char *EP_IN_NAME;
>  static const char *EP_OUT_NAME;
>  static const char *EP_NOTIFY_NAME;
>  
> -static struct semaphore	gs_open_close_sem[GS_NUM_PORTS];
> +static struct mutex gs_open_close_lock[GS_NUM_PORTS];
>  
>  static unsigned int read_q_size = GS_DEFAULT_READ_Q_SIZE;
>  static unsigned int write_q_size = GS_DEFAULT_WRITE_Q_SIZE;
> @@ -595,7 +596,7 @@ static int __init gs_module_init(void)
>  	tty_set_operations(gs_tty_driver, &gs_tty_ops);
>  
>  	for (i=0; i < GS_NUM_PORTS; i++)
> -		sema_init(&gs_open_close_sem[i], 1);
> +		mutex_init(&gs_open_close_lock[i]);
>  
>  	retval = tty_register_driver(gs_tty_driver);
>  	if (retval) {
> @@ -635,7 +636,7 @@ static int gs_open(struct tty_struct *tty, struct file *file)
>  	struct gs_port *port;
>  	struct gs_dev *dev;
>  	struct gs_buf *buf;
> -	struct semaphore *sem;
> +	struct mutex *mtx;
>  	int ret;
>  
>  	port_num = tty->index;
> @@ -656,10 +657,10 @@ static int gs_open(struct tty_struct *tty, struct file *file)
>  		return -ENODEV;
>  	}
>  
> -	sem = &gs_open_close_sem[port_num];
> -	if (down_interruptible(sem)) {
> +	mtx = &gs_open_close_lock[port_num];
> +	if (mutex_lock_interruptible(mtx)) {
>  		printk(KERN_ERR
> -		"gs_open: (%d,%p,%p) interrupted waiting for semaphore\n",
> +		"gs_open: (%d,%p,%p) interrupted waiting for mutex\n",
>  			port_num, tty, file);
>  		return -ERESTARTSYS;
>  	}
> @@ -754,12 +755,12 @@ static int gs_open(struct tty_struct *tty, struct file *file)
>  
>  exit_unlock_port:
>  	spin_unlock_irqrestore(&port->port_lock, flags);
> -	up(sem);
> +	mutex_unlock(mtx);
>  	return ret;
>  
>  exit_unlock_dev:
>  	spin_unlock_irqrestore(&dev->dev_lock, flags);
> -	up(sem);
> +	mutex_unlock(mtx);
>  	return ret;
>  
>  }
> @@ -781,7 +782,7 @@ exit_unlock_dev:
>  static void gs_close(struct tty_struct *tty, struct file *file)
>  {
>  	struct gs_port *port = tty->driver_data;
> -	struct semaphore *sem;
> +	struct mutex *mtx;
>  
>  	if (port == NULL) {
>  		printk(KERN_ERR "gs_close: NULL port pointer\n");
> @@ -790,8 +791,8 @@ static void gs_close(struct tty_struct *tty, struct file *file)
>  
>  	gs_debug("gs_close: (%d,%p,%p)\n", port->port_num, tty, file);
>  
> -	sem = &gs_open_close_sem[port->port_num];
> -	down(sem);
> +	mtx = &gs_open_close_lock[port->port_num];
> +	mutex_lock(mtx);
>  
>  	spin_lock_irq(&port->port_lock);
>  
> @@ -846,7 +847,7 @@ static void gs_close(struct tty_struct *tty, struct file *file)
>  
>  exit:
>  	spin_unlock_irq(&port->port_lock);
> -	up(sem);
> +	mutex_unlock(mtx);
>  }
>  
>  /*
> 
> -- 
> Matthias Kaehlcke
> Linux Application Developer
> Barcelona
> 
>              If liberty means anything at all, it means the
>            right to tell people what they do not want to hear
>                             (George Orwell)
>                                                                  .''`.
>     using free software / Debian GNU/Linux | http://debian.org  : :'  :
>                                                                 `. `'`
> gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4                  `-
> 



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.