forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.2 KiB
61 lines
1.2 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
#include <linux/tty.h> |
|
#include <linux/module.h> |
|
#include <linux/kallsyms.h> |
|
#include <linux/semaphore.h> |
|
#include <linux/sched.h> |
|
#include "tty.h" |
|
|
|
/* Legacy tty mutex glue */ |
|
|
|
/* |
|
* Getting the big tty mutex. |
|
*/ |
|
|
|
void tty_lock(struct tty_struct *tty) |
|
{ |
|
if (WARN(tty->magic != TTY_MAGIC, "L Bad %p\n", tty)) |
|
return; |
|
tty_kref_get(tty); |
|
mutex_lock(&tty->legacy_mutex); |
|
} |
|
EXPORT_SYMBOL(tty_lock); |
|
|
|
int tty_lock_interruptible(struct tty_struct *tty) |
|
{ |
|
int ret; |
|
|
|
if (WARN(tty->magic != TTY_MAGIC, "L Bad %p\n", tty)) |
|
return -EIO; |
|
tty_kref_get(tty); |
|
ret = mutex_lock_interruptible(&tty->legacy_mutex); |
|
if (ret) |
|
tty_kref_put(tty); |
|
return ret; |
|
} |
|
|
|
void tty_unlock(struct tty_struct *tty) |
|
{ |
|
if (WARN(tty->magic != TTY_MAGIC, "U Bad %p\n", tty)) |
|
return; |
|
mutex_unlock(&tty->legacy_mutex); |
|
tty_kref_put(tty); |
|
} |
|
EXPORT_SYMBOL(tty_unlock); |
|
|
|
void tty_lock_slave(struct tty_struct *tty) |
|
{ |
|
if (tty && tty != tty->link) |
|
tty_lock(tty); |
|
} |
|
|
|
void 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_LOCK_SLAVE); |
|
}
|
|
|