diff options
Diffstat (limited to 'include/linux/tty.h')
-rw-r--r-- | include/linux/tty.h | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/include/linux/tty.h b/include/linux/tty.h index 9f47ab540f65..4990ef2b1fb7 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -268,6 +268,7 @@ struct tty_struct { | |||
268 | struct mutex ldisc_mutex; | 268 | struct mutex ldisc_mutex; |
269 | struct tty_ldisc *ldisc; | 269 | struct tty_ldisc *ldisc; |
270 | 270 | ||
271 | struct mutex legacy_mutex; | ||
271 | struct mutex termios_mutex; | 272 | struct mutex termios_mutex; |
272 | spinlock_t ctrl_lock; | 273 | spinlock_t ctrl_lock; |
273 | /* Termios values are protected by the termios mutex */ | 274 | /* Termios values are protected by the termios mutex */ |
@@ -605,8 +606,12 @@ extern long vt_compat_ioctl(struct tty_struct *tty, | |||
605 | 606 | ||
606 | /* tty_mutex.c */ | 607 | /* tty_mutex.c */ |
607 | /* functions for preparation of BKL removal */ | 608 | /* functions for preparation of BKL removal */ |
608 | extern void __lockfunc tty_lock(void) __acquires(tty_lock); | 609 | extern void __lockfunc tty_lock(struct tty_struct *tty); |
609 | extern void __lockfunc tty_unlock(void) __releases(tty_lock); | 610 | extern void __lockfunc tty_unlock(struct tty_struct *tty); |
611 | extern void __lockfunc tty_lock_pair(struct tty_struct *tty, | ||
612 | struct tty_struct *tty2); | ||
613 | extern void __lockfunc tty_unlock_pair(struct tty_struct *tty, | ||
614 | struct tty_struct *tty2); | ||
610 | 615 | ||
611 | /* | 616 | /* |
612 | * this shall be called only from where BTM is held (like close) | 617 | * this shall be called only from where BTM is held (like close) |
@@ -621,9 +626,9 @@ extern void __lockfunc tty_unlock(void) __releases(tty_lock); | |||
621 | static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | 626 | static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, |
622 | long timeout) | 627 | long timeout) |
623 | { | 628 | { |
624 | tty_unlock(); /* tty->ops->close holds the BTM, drop it while waiting */ | 629 | tty_unlock(tty); /* tty->ops->close holds the BTM, drop it while waiting */ |
625 | tty_wait_until_sent(tty, timeout); | 630 | tty_wait_until_sent(tty, timeout); |
626 | tty_lock(); | 631 | tty_lock(tty); |
627 | } | 632 | } |
628 | 633 | ||
629 | /* | 634 | /* |
@@ -638,16 +643,16 @@ static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | |||
638 | * | 643 | * |
639 | * Do not use in new code. | 644 | * Do not use in new code. |
640 | */ | 645 | */ |
641 | #define wait_event_interruptible_tty(wq, condition) \ | 646 | #define wait_event_interruptible_tty(tty, wq, condition) \ |
642 | ({ \ | 647 | ({ \ |
643 | int __ret = 0; \ | 648 | int __ret = 0; \ |
644 | if (!(condition)) { \ | 649 | if (!(condition)) { \ |
645 | __wait_event_interruptible_tty(wq, condition, __ret); \ | 650 | __wait_event_interruptible_tty(tty, wq, condition, __ret); \ |
646 | } \ | 651 | } \ |
647 | __ret; \ | 652 | __ret; \ |
648 | }) | 653 | }) |
649 | 654 | ||
650 | #define __wait_event_interruptible_tty(wq, condition, ret) \ | 655 | #define __wait_event_interruptible_tty(tty, wq, condition, ret) \ |
651 | do { \ | 656 | do { \ |
652 | DEFINE_WAIT(__wait); \ | 657 | DEFINE_WAIT(__wait); \ |
653 | \ | 658 | \ |
@@ -656,9 +661,9 @@ do { \ | |||
656 | if (condition) \ | 661 | if (condition) \ |
657 | break; \ | 662 | break; \ |
658 | if (!signal_pending(current)) { \ | 663 | if (!signal_pending(current)) { \ |
659 | tty_unlock(); \ | 664 | tty_unlock(tty); \ |
660 | schedule(); \ | 665 | schedule(); \ |
661 | tty_lock(); \ | 666 | tty_lock(tty); \ |
662 | continue; \ | 667 | continue; \ |
663 | } \ | 668 | } \ |
664 | ret = -ERESTARTSYS; \ | 669 | ret = -ERESTARTSYS; \ |