2010-08-06 23:40:30 +04:00
# include <linux/tty.h>
# include <linux/module.h>
# include <linux/kallsyms.h>
# include <linux/semaphore.h>
# include <linux/sched.h>
2012-08-08 19:30:13 +04:00
/* Legacy tty mutex glue */
2010-08-06 23:40:30 +04:00
/*
* Getting the big tty mutex .
*/
2012-08-08 19:30:13 +04:00
2016-01-10 08:13:51 +03:00
void tty_lock ( struct tty_struct * tty )
2010-08-06 23:40:30 +04:00
{
2015-11-08 21:01:20 +03:00
if ( WARN ( tty - > magic ! = TTY_MAGIC , " L Bad %p \n " , tty ) )
2012-08-08 19:30:13 +04:00
return ;
tty_kref_get ( tty ) ;
2014-11-05 20:13:02 +03:00
mutex_lock ( & tty - > legacy_mutex ) ;
2010-08-06 23:40:30 +04:00
}
EXPORT_SYMBOL ( tty_lock ) ;
2016-01-10 08:13:44 +03:00
int tty_lock_interruptible ( struct tty_struct * tty )
{
2016-02-05 21:49:36 +03:00
int ret ;
2016-01-10 08:13:44 +03:00
if ( WARN ( tty - > magic ! = TTY_MAGIC , " L Bad %p \n " , tty ) )
return - EIO ;
tty_kref_get ( tty ) ;
2016-02-05 21:49:36 +03:00
ret = mutex_lock_interruptible ( & tty - > legacy_mutex ) ;
if ( ret )
tty_kref_put ( tty ) ;
return ret ;
2016-01-10 08:13:44 +03:00
}
2016-01-10 08:13:51 +03:00
void tty_unlock ( struct tty_struct * tty )
2010-08-06 23:40:30 +04:00
{
2015-11-08 21:01:20 +03:00
if ( WARN ( tty - > magic ! = TTY_MAGIC , " U Bad %p \n " , tty ) )
2012-08-08 19:30:13 +04:00
return ;
mutex_unlock ( & tty - > legacy_mutex ) ;
tty_kref_put ( tty ) ;
2010-08-06 23:40:30 +04:00
}
EXPORT_SYMBOL ( tty_unlock ) ;
2012-08-08 19:30:13 +04:00
2016-01-10 08:13:51 +03:00
void tty_lock_slave ( struct tty_struct * tty )
2012-08-08 19:30:13 +04:00
{
2014-12-30 15:11:11 +03:00
if ( tty & & tty ! = tty - > link )
2014-11-05 20:13:02 +03:00
tty_lock ( tty ) ;
2012-08-08 19:30:13 +04:00
}
2016-01-10 08:13:51 +03:00
void tty_unlock_slave ( struct tty_struct * tty )
2012-08-08 19:30:13 +04:00
{
2014-11-05 20:13:01 +03:00
if ( tty & & tty ! = tty - > link )
tty_unlock ( tty ) ;
2012-08-08 19:30:13 +04:00
}
2014-11-05 20:13:02 +03:00
void tty_set_lock_subclass ( struct tty_struct * tty )
{
2015-01-17 23:42:04 +03:00
lockdep_set_subclass ( & tty - > legacy_mutex , TTY_LOCK_SLAVE ) ;
2014-11-05 20:13:02 +03:00
}