Skip to content

Commit e3757a1

Browse files
committed
Merge tag 'tty-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty fixes from Greg KH: "Here are two tty driver fixes for 3.12-rc4. One fixes the reported regression in the n_tty code that a number of people found recently, and the other one fixes an issue with xen consoles that broke in 3.10" * tag 'tty-3.12-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: xen/hvc: allow xenboot console to be used again tty: Fix pty master read() after slave closes
2 parents 20fa786 + a9fbf4d commit e3757a1

File tree

2 files changed

+27
-20
lines changed

2 files changed

+27
-20
lines changed

drivers/tty/hvc/hvc_xen.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -636,6 +636,7 @@ struct console xenboot_console = {
636636
.name = "xenboot",
637637
.write = xenboot_write_console,
638638
.flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME,
639+
.index = -1,
639640
};
640641
#endif /* CONFIG_EARLY_PRINTK */
641642

drivers/tty/n_tty.c

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,28 +2183,34 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
21832183

21842184
if (!input_available_p(tty, 0)) {
21852185
if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) {
2186-
retval = -EIO;
2187-
break;
2188-
}
2189-
if (tty_hung_up_p(file))
2190-
break;
2191-
if (!timeout)
2192-
break;
2193-
if (file->f_flags & O_NONBLOCK) {
2194-
retval = -EAGAIN;
2195-
break;
2196-
}
2197-
if (signal_pending(current)) {
2198-
retval = -ERESTARTSYS;
2199-
break;
2200-
}
2201-
n_tty_set_room(tty);
2202-
up_read(&tty->termios_rwsem);
2186+
up_read(&tty->termios_rwsem);
2187+
tty_flush_to_ldisc(tty);
2188+
down_read(&tty->termios_rwsem);
2189+
if (!input_available_p(tty, 0)) {
2190+
retval = -EIO;
2191+
break;
2192+
}
2193+
} else {
2194+
if (tty_hung_up_p(file))
2195+
break;
2196+
if (!timeout)
2197+
break;
2198+
if (file->f_flags & O_NONBLOCK) {
2199+
retval = -EAGAIN;
2200+
break;
2201+
}
2202+
if (signal_pending(current)) {
2203+
retval = -ERESTARTSYS;
2204+
break;
2205+
}
2206+
n_tty_set_room(tty);
2207+
up_read(&tty->termios_rwsem);
22032208

2204-
timeout = schedule_timeout(timeout);
2209+
timeout = schedule_timeout(timeout);
22052210

2206-
down_read(&tty->termios_rwsem);
2207-
continue;
2211+
down_read(&tty->termios_rwsem);
2212+
continue;
2213+
}
22082214
}
22092215
__set_current_state(TASK_RUNNING);
22102216

0 commit comments

Comments
 (0)