xref: /openbmc/linux/drivers/tty/tty_mutex.c (revision 0bfd464d)
196fd7ce5SGreg Kroah-Hartman #include <linux/tty.h>
296fd7ce5SGreg Kroah-Hartman #include <linux/module.h>
396fd7ce5SGreg Kroah-Hartman #include <linux/kallsyms.h>
496fd7ce5SGreg Kroah-Hartman #include <linux/semaphore.h>
596fd7ce5SGreg Kroah-Hartman #include <linux/sched.h>
696fd7ce5SGreg Kroah-Hartman 
789c8d91eSAlan Cox /* Legacy tty mutex glue */
889c8d91eSAlan Cox 
996fd7ce5SGreg Kroah-Hartman /*
1096fd7ce5SGreg Kroah-Hartman  * Getting the big tty mutex.
1196fd7ce5SGreg Kroah-Hartman  */
1289c8d91eSAlan Cox 
132febdb63SPeter Hurley void __lockfunc tty_lock(struct tty_struct *tty)
1496fd7ce5SGreg Kroah-Hartman {
156d029c68SPeter Hurley 	if (WARN(tty->magic != TTY_MAGIC, "L Bad %p\n", tty))
1689c8d91eSAlan Cox 		return;
1789c8d91eSAlan Cox 	tty_kref_get(tty);
182febdb63SPeter Hurley 	mutex_lock(&tty->legacy_mutex);
1996fd7ce5SGreg Kroah-Hartman }
2096fd7ce5SGreg Kroah-Hartman EXPORT_SYMBOL(tty_lock);
2196fd7ce5SGreg Kroah-Hartman 
220bfd464dSPeter Hurley int tty_lock_interruptible(struct tty_struct *tty)
230bfd464dSPeter Hurley {
240bfd464dSPeter Hurley 	if (WARN(tty->magic != TTY_MAGIC, "L Bad %p\n", tty))
250bfd464dSPeter Hurley 		return -EIO;
260bfd464dSPeter Hurley 	tty_kref_get(tty);
270bfd464dSPeter Hurley 	return mutex_lock_interruptible(&tty->legacy_mutex);
280bfd464dSPeter Hurley }
290bfd464dSPeter Hurley 
3089c8d91eSAlan Cox void __lockfunc tty_unlock(struct tty_struct *tty)
3196fd7ce5SGreg Kroah-Hartman {
326d029c68SPeter Hurley 	if (WARN(tty->magic != TTY_MAGIC, "U Bad %p\n", tty))
3389c8d91eSAlan Cox 		return;
3489c8d91eSAlan Cox 	mutex_unlock(&tty->legacy_mutex);
3589c8d91eSAlan Cox 	tty_kref_put(tty);
3696fd7ce5SGreg Kroah-Hartman }
3796fd7ce5SGreg Kroah-Hartman EXPORT_SYMBOL(tty_unlock);
3889c8d91eSAlan Cox 
392aff5e2bSPeter Hurley void __lockfunc tty_lock_slave(struct tty_struct *tty)
4089c8d91eSAlan Cox {
41eef15e2aSPeter Hurley 	if (tty && tty != tty->link)
422febdb63SPeter Hurley 		tty_lock(tty);
4389c8d91eSAlan Cox }
4489c8d91eSAlan Cox 
452aff5e2bSPeter Hurley void __lockfunc tty_unlock_slave(struct tty_struct *tty)
4689c8d91eSAlan Cox {
472aff5e2bSPeter Hurley 	if (tty && tty != tty->link)
4889c8d91eSAlan Cox 		tty_unlock(tty);
4989c8d91eSAlan Cox }
502febdb63SPeter Hurley 
512febdb63SPeter Hurley void tty_set_lock_subclass(struct tty_struct *tty)
522febdb63SPeter Hurley {
533abf87cdSPeter Hurley 	lockdep_set_subclass(&tty->legacy_mutex, TTY_LOCK_SLAVE);
542febdb63SPeter Hurley }
55