use spinlock instead of semaphore in tty_io.c
PATCH 1/1 use spinlock instead of semaphore in tty_io.c
drivers/char/tty_io.c uses a semaphore to protect quick non-blocking operations. use a spinlock instead of the (binary) semaphore
Signed-off-by Matthias Kaehlcke <[email protected]>
Signed-off-by Christoph Hellwig <[email protected]>
--
drivers/char/tty_io.c +12 -12
@@ -137,7 +137,7 @@ EXPORT_SYMBOL(tty_mutex);extern struct tty_driver *ptm_driver;/* Unix98 pty masters; for /dev/ptmx */ extern int pty_limit;/* Config limit on Unix98 ptys */ static DEFINE_IDR (allocated_ptys); -static DECLARE_MUTEX (allocated_ptys_lock); +static DEFINE_SPINLOCK (allocated_ptys_lock);static int ptmx_open (struct inode *,struct file *);#endif
@@ -2471,9 +2471,9 @@ static void release_dev(struct file * filp)#ifdef CONFIG_UNIX98_PTYS /* Make this pty number available for reallocation */ if (devpts) { -down (&allocated_ptys_lock); +spin_lock (&allocated_ptys_lock);idr_remove (&allocated_ptys, idx); -up (&allocated_ptys_lock); +spin_unlock (&allocated_ptys_lock); }#endif
@@ -2639,24 +2639,24 @@ static int ptmx_open(struct inode * inode, struct file * filp)nonseekable_open (inode, filp);/* find a device that is not in use. */ -down (&allocated_ptys_lock); -if (!idr_pre_get (&allocated_ptys,GFP_KERNEL )) { -up (&allocated_ptys_lock); +if (!idr_pre_get (&allocated_ptys,GFP_KERNEL ))return -ENOMEM ; - } + +spin_lock (&allocated_ptys_lock); + idr_ret =idr_get_new (&allocated_ptys,NULL , &index);if (idr_ret <0 ) { -up (&allocated_ptys_lock); +spin_unlock (&allocated_ptys_lock);if (idr_ret == -EAGAIN )return -ENOMEM ;return -EIO ; }if (index >= pty_limit) {idr_remove (&allocated_ptys, index); -up (&allocated_ptys_lock); +spin_unlock (&allocated_ptys_lock);return -EIO ; } -up (&allocated_ptys_lock); +spin_unlock (&allocated_ptys_lock);mutex_lock (&tty_mutex); retval =init_dev (ptm_driver, index, &tty);
@@ -2681,9 +2681,9 @@ out1:release_dev (filp);return retval; out: -down (&allocated_ptys_lock); +spin_lock (&allocated_ptys_lock);idr_remove (&allocated_ptys, index); -up (&allocated_ptys_lock); +spin_unlock (&allocated_ptys_lock); return retval; }#endif
Signature · 11 lines
Matthias Kaehlcke
Linux Application Developer
Barcelona
You can't separate peace from freedom because no
one can be at peace unless he has his freedom
(Malcolm X)
.''`.
using free software / Debian GNU/Linux | http://debian.org : :' :
`. `'`
gpg --keyserver pgp.mit.edu --recv-keys 47D8E5D4 `-