summaryrefslogtreecommitdiffstats
path: root/drivers/char/n_tty.c
diff options
context:
space:
mode:
authorOGAWA Hirofumi <hirofumi@mail.parknet.co.jp>2009-07-29 12:15:56 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-07-29 12:15:56 -0700
commite043e42bdb66885b3ac10d27a01ccb9972e2b0a3 (patch)
tree12b40fd776f653484a77fd84f07cc304276141b1 /drivers/char/n_tty.c
parent7d3e91b8a1f5179d56a7412d4b499f2d5fc6b25d (diff)
downloadblackbird-op-linux-e043e42bdb66885b3ac10d27a01ccb9972e2b0a3.tar.gz
blackbird-op-linux-e043e42bdb66885b3ac10d27a01ccb9972e2b0a3.zip
pty: avoid forcing 'low_latency' tty flag
We really don't want to mark the pty as a low-latency device, because as Alan points out, the ->write method can be called from an IRQ (ppp?), and that means we can't use ->low_latency=1 as we take mutexes in the low_latency case. So rather than using low_latency to force the written data to be pushed to the ldisc handling at 'write()' time, just make the reader side (or the poll function) do the flush when it checks whether there is data to be had. This also fixes the problem with lost data in an emacs compile buffer (bugzilla 13815), and we can thus revert the low_latency pty hack (commit 3a54297478e6578f96fd54bf4daa1751130aca86: "pty: quickfix for the pty ENXIO timing problems"). Signed-off-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Tested-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> [ Modified to do the tty_flush_to_ldisc() inside input_available_p() so that it triggers for both read and poll() - Linus] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/n_tty.c')
-rw-r--r--drivers/char/n_tty.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/char/n_tty.c b/drivers/char/n_tty.c
index ff47907ff1bf..973be2f44195 100644
--- a/drivers/char/n_tty.c
+++ b/drivers/char/n_tty.c
@@ -1583,6 +1583,7 @@ static int n_tty_open(struct tty_struct *tty)
static inline int input_available_p(struct tty_struct *tty, int amt)
{
+ tty_flush_to_ldisc(tty);
if (tty->icanon) {
if (tty->canon_data)
return 1;
OpenPOWER on IntegriCloud