mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-03-04 17:51:31 +07:00
epoll keyed wakeups: make tty use keyed wakeups
Introduce keyed event wakeups inside the TTY code. Signed-off-by: Davide Libenzi <davidel@xmailserver.org> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Cc: Ingo Molnar <mingo@elte.hu> Cc: David Miller <davem@davemloft.net> Cc: William Lee Irwin III <wli@movementarian.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
395108880e
commit
4b19449db0
@ -464,7 +464,7 @@ void tty_wakeup(struct tty_struct *tty)
|
|||||||
tty_ldisc_deref(ld);
|
tty_ldisc_deref(ld);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
wake_up_interruptible(&tty->write_wait);
|
wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL_GPL(tty_wakeup);
|
EXPORT_SYMBOL_GPL(tty_wakeup);
|
||||||
@ -587,8 +587,8 @@ static void do_tty_hangup(struct work_struct *work)
|
|||||||
* FIXME: Once we trust the LDISC code better we can wait here for
|
* FIXME: Once we trust the LDISC code better we can wait here for
|
||||||
* ldisc completion and fix the driver call race
|
* ldisc completion and fix the driver call race
|
||||||
*/
|
*/
|
||||||
wake_up_interruptible(&tty->write_wait);
|
wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
|
||||||
wake_up_interruptible(&tty->read_wait);
|
wake_up_interruptible_poll(&tty->read_wait, POLLIN);
|
||||||
/*
|
/*
|
||||||
* Shutdown the current line discipline, and reset it to
|
* Shutdown the current line discipline, and reset it to
|
||||||
* N_TTY.
|
* N_TTY.
|
||||||
@ -879,7 +879,7 @@ void stop_tty(struct tty_struct *tty)
|
|||||||
if (tty->link && tty->link->packet) {
|
if (tty->link && tty->link->packet) {
|
||||||
tty->ctrl_status &= ~TIOCPKT_START;
|
tty->ctrl_status &= ~TIOCPKT_START;
|
||||||
tty->ctrl_status |= TIOCPKT_STOP;
|
tty->ctrl_status |= TIOCPKT_STOP;
|
||||||
wake_up_interruptible(&tty->link->read_wait);
|
wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
||||||
if (tty->ops->stop)
|
if (tty->ops->stop)
|
||||||
@ -913,7 +913,7 @@ void start_tty(struct tty_struct *tty)
|
|||||||
if (tty->link && tty->link->packet) {
|
if (tty->link && tty->link->packet) {
|
||||||
tty->ctrl_status &= ~TIOCPKT_STOP;
|
tty->ctrl_status &= ~TIOCPKT_STOP;
|
||||||
tty->ctrl_status |= TIOCPKT_START;
|
tty->ctrl_status |= TIOCPKT_START;
|
||||||
wake_up_interruptible(&tty->link->read_wait);
|
wake_up_interruptible_poll(&tty->link->read_wait, POLLIN);
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
spin_unlock_irqrestore(&tty->ctrl_lock, flags);
|
||||||
if (tty->ops->start)
|
if (tty->ops->start)
|
||||||
@ -970,7 +970,7 @@ static ssize_t tty_read(struct file *file, char __user *buf, size_t count,
|
|||||||
void tty_write_unlock(struct tty_struct *tty)
|
void tty_write_unlock(struct tty_struct *tty)
|
||||||
{
|
{
|
||||||
mutex_unlock(&tty->atomic_write_lock);
|
mutex_unlock(&tty->atomic_write_lock);
|
||||||
wake_up_interruptible(&tty->write_wait);
|
wake_up_interruptible_poll(&tty->write_wait, POLLOUT);
|
||||||
}
|
}
|
||||||
|
|
||||||
int tty_write_lock(struct tty_struct *tty, int ndelay)
|
int tty_write_lock(struct tty_struct *tty, int ndelay)
|
||||||
@ -1623,21 +1623,21 @@ void tty_release_dev(struct file *filp)
|
|||||||
|
|
||||||
if (tty_closing) {
|
if (tty_closing) {
|
||||||
if (waitqueue_active(&tty->read_wait)) {
|
if (waitqueue_active(&tty->read_wait)) {
|
||||||
wake_up(&tty->read_wait);
|
wake_up_poll(&tty->read_wait, POLLIN);
|
||||||
do_sleep++;
|
do_sleep++;
|
||||||
}
|
}
|
||||||
if (waitqueue_active(&tty->write_wait)) {
|
if (waitqueue_active(&tty->write_wait)) {
|
||||||
wake_up(&tty->write_wait);
|
wake_up_poll(&tty->write_wait, POLLOUT);
|
||||||
do_sleep++;
|
do_sleep++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (o_tty_closing) {
|
if (o_tty_closing) {
|
||||||
if (waitqueue_active(&o_tty->read_wait)) {
|
if (waitqueue_active(&o_tty->read_wait)) {
|
||||||
wake_up(&o_tty->read_wait);
|
wake_up_poll(&o_tty->read_wait, POLLIN);
|
||||||
do_sleep++;
|
do_sleep++;
|
||||||
}
|
}
|
||||||
if (waitqueue_active(&o_tty->write_wait)) {
|
if (waitqueue_active(&o_tty->write_wait)) {
|
||||||
wake_up(&o_tty->write_wait);
|
wake_up_poll(&o_tty->write_wait, POLLOUT);
|
||||||
do_sleep++;
|
do_sleep++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user