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