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