diff options
| -rw-r--r-- | drivers/tty/pty.c | 2 | ||||
| -rw-r--r-- | drivers/tty/tty_mutex.c | 19 | ||||
| -rw-r--r-- | include/linux/tty.h | 1 | 
3 files changed, 12 insertions, 10 deletions
| diff --git a/drivers/tty/pty.c b/drivers/tty/pty.c index bdb8fd1a2026..11db7dc8676b 100644 --- a/drivers/tty/pty.c +++ b/drivers/tty/pty.c @@ -399,6 +399,8 @@ static int pty_common_install(struct tty_driver *driver, struct tty_struct *tty,  	if (!o_tty)  		goto err_put_module; +	tty_set_lock_subclass(o_tty); +  	if (legacy) {  		/* We always use new tty termios data so we can do this  		   the easy way .. */ diff --git a/drivers/tty/tty_mutex.c b/drivers/tty/tty_mutex.c index f43e995c7a0f..4486741190c4 100644 --- a/drivers/tty/tty_mutex.c +++ b/drivers/tty/tty_mutex.c @@ -13,15 +13,14 @@  enum {  	TTY_MUTEX_NORMAL, -	TTY_MUTEX_NESTED, +	TTY_MUTEX_SLAVE,  };  /*   * Getting the big tty mutex.   */ -static void __lockfunc tty_lock_nested(struct tty_struct *tty, -				       unsigned int subclass) +void __lockfunc tty_lock(struct tty_struct *tty)  {  	if (tty->magic != TTY_MAGIC) {  		pr_err("L Bad %p\n", tty); @@ -29,12 +28,7 @@ static void __lockfunc tty_lock_nested(struct tty_struct *tty,  		return;  	}  	tty_kref_get(tty); -	mutex_lock_nested(&tty->legacy_mutex, subclass); -} - -void __lockfunc tty_lock(struct tty_struct *tty) -{ -	return tty_lock_nested(tty, TTY_MUTEX_NORMAL); +	mutex_lock(&tty->legacy_mutex);  }  EXPORT_SYMBOL(tty_lock); @@ -56,7 +50,7 @@ void __lockfunc tty_lock_slave(struct tty_struct *tty)  		WARN_ON(!mutex_is_locked(&tty->link->legacy_mutex) ||  			!tty->driver->type == TTY_DRIVER_TYPE_PTY ||  			!tty->driver->type == PTY_TYPE_SLAVE); -		tty_lock_nested(tty, TTY_MUTEX_NESTED); +		tty_lock(tty);  	}  } @@ -65,3 +59,8 @@ void __lockfunc tty_unlock_slave(struct tty_struct *tty)  	if (tty && tty != tty->link)  		tty_unlock(tty);  } + +void tty_set_lock_subclass(struct tty_struct *tty) +{ +	lockdep_set_subclass(&tty->legacy_mutex, TTY_MUTEX_SLAVE); +} diff --git a/include/linux/tty.h b/include/linux/tty.h index a07b4b415db8..196c352a5ce8 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -640,6 +640,7 @@ extern void __lockfunc tty_lock(struct tty_struct *tty);  extern void __lockfunc tty_unlock(struct tty_struct *tty);  extern void __lockfunc tty_lock_slave(struct tty_struct *tty);  extern void __lockfunc tty_unlock_slave(struct tty_struct *tty); +extern void tty_set_lock_subclass(struct tty_struct *tty);  /*   * this shall be called only from where BTM is held (like close)   * | 
