diff options
Diffstat (limited to 'include/linux/tty.h')
-rw-r--r-- | include/linux/tty.h | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/include/linux/tty.h b/include/linux/tty.h index 5f2ede82b3d6..5dbb3cb05a82 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
@@ -473,7 +473,9 @@ extern void proc_clear_tty(struct task_struct *p); | |||
473 | extern struct tty_struct *get_current_tty(void); | 473 | extern struct tty_struct *get_current_tty(void); |
474 | extern void tty_default_fops(struct file_operations *fops); | 474 | extern void tty_default_fops(struct file_operations *fops); |
475 | extern struct tty_struct *alloc_tty_struct(void); | 475 | extern struct tty_struct *alloc_tty_struct(void); |
476 | extern int tty_add_file(struct tty_struct *tty, struct file *file); | 476 | extern int tty_alloc_file(struct file *file); |
477 | extern void tty_add_file(struct tty_struct *tty, struct file *file); | ||
478 | extern void tty_free_file(struct file *file); | ||
477 | extern void free_tty_struct(struct tty_struct *tty); | 479 | extern void free_tty_struct(struct tty_struct *tty); |
478 | extern void initialize_tty_struct(struct tty_struct *tty, | 480 | extern void initialize_tty_struct(struct tty_struct *tty, |
479 | struct tty_driver *driver, int idx); | 481 | struct tty_driver *driver, int idx); |
@@ -581,6 +583,8 @@ extern int __init tty_init(void); | |||
581 | /* tty_ioctl.c */ | 583 | /* tty_ioctl.c */ |
582 | extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file, | 584 | extern int n_tty_ioctl_helper(struct tty_struct *tty, struct file *file, |
583 | unsigned int cmd, unsigned long arg); | 585 | unsigned int cmd, unsigned long arg); |
586 | extern long n_tty_compat_ioctl_helper(struct tty_struct *tty, struct file *file, | ||
587 | unsigned int cmd, unsigned long arg); | ||
584 | 588 | ||
585 | /* serial.c */ | 589 | /* serial.c */ |
586 | 590 | ||
@@ -602,8 +606,24 @@ extern long vt_compat_ioctl(struct tty_struct *tty, | |||
602 | /* functions for preparation of BKL removal */ | 606 | /* functions for preparation of BKL removal */ |
603 | extern void __lockfunc tty_lock(void) __acquires(tty_lock); | 607 | extern void __lockfunc tty_lock(void) __acquires(tty_lock); |
604 | extern void __lockfunc tty_unlock(void) __releases(tty_lock); | 608 | extern void __lockfunc tty_unlock(void) __releases(tty_lock); |
605 | extern struct task_struct *__big_tty_mutex_owner; | 609 | |
606 | #define tty_locked() (current == __big_tty_mutex_owner) | 610 | /* |
611 | * this shall be called only from where BTM is held (like close) | ||
612 | * | ||
613 | * We need this to ensure nobody waits for us to finish while we are waiting. | ||
614 | * Without this we were encountering system stalls. | ||
615 | * | ||
616 | * This should be indeed removed with BTM removal later. | ||
617 | * | ||
618 | * Locking: BTM required. Nobody is allowed to hold port->mutex. | ||
619 | */ | ||
620 | static inline void tty_wait_until_sent_from_close(struct tty_struct *tty, | ||
621 | long timeout) | ||
622 | { | ||
623 | tty_unlock(); /* tty->ops->close holds the BTM, drop it while waiting */ | ||
624 | tty_wait_until_sent(tty, timeout); | ||
625 | tty_lock(); | ||
626 | } | ||
607 | 627 | ||
608 | /* | 628 | /* |
609 | * wait_event_interruptible_tty -- wait for a condition with the tty lock held | 629 | * wait_event_interruptible_tty -- wait for a condition with the tty lock held |