diff options
| -rw-r--r-- | drivers/tty/hvc/hvc_xen.c | 1 | ||||
| -rw-r--r-- | drivers/tty/n_tty.c | 46 |
2 files changed, 27 insertions, 20 deletions
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c index e61c36cbb866..c193af6a628f 100644 --- a/drivers/tty/hvc/hvc_xen.c +++ b/drivers/tty/hvc/hvc_xen.c | |||
| @@ -636,6 +636,7 @@ struct console xenboot_console = { | |||
| 636 | .name = "xenboot", | 636 | .name = "xenboot", |
| 637 | .write = xenboot_write_console, | 637 | .write = xenboot_write_console, |
| 638 | .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, | 638 | .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME, |
| 639 | .index = -1, | ||
| 639 | }; | 640 | }; |
| 640 | #endif /* CONFIG_EARLY_PRINTK */ | 641 | #endif /* CONFIG_EARLY_PRINTK */ |
| 641 | 642 | ||
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c index 01bf5eb4f238..7a744b69c3d1 100644 --- a/drivers/tty/n_tty.c +++ b/drivers/tty/n_tty.c | |||
| @@ -2183,28 +2183,34 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file, | |||
| 2183 | 2183 | ||
| 2184 | if (!input_available_p(tty, 0)) { | 2184 | if (!input_available_p(tty, 0)) { |
| 2185 | if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) { | 2185 | if (test_bit(TTY_OTHER_CLOSED, &tty->flags)) { |
| 2186 | retval = -EIO; | 2186 | up_read(&tty->termios_rwsem); |
| 2187 | break; | 2187 | tty_flush_to_ldisc(tty); |
| 2188 | } | 2188 | down_read(&tty->termios_rwsem); |
| 2189 | if (tty_hung_up_p(file)) | 2189 | if (!input_available_p(tty, 0)) { |
| 2190 | break; | 2190 | retval = -EIO; |
| 2191 | if (!timeout) | 2191 | break; |
| 2192 | break; | 2192 | } |
| 2193 | if (file->f_flags & O_NONBLOCK) { | 2193 | } else { |
| 2194 | retval = -EAGAIN; | 2194 | if (tty_hung_up_p(file)) |
| 2195 | break; | 2195 | break; |
| 2196 | } | 2196 | if (!timeout) |
| 2197 | if (signal_pending(current)) { | 2197 | break; |
| 2198 | retval = -ERESTARTSYS; | 2198 | if (file->f_flags & O_NONBLOCK) { |
| 2199 | break; | 2199 | retval = -EAGAIN; |
| 2200 | } | 2200 | break; |
| 2201 | n_tty_set_room(tty); | 2201 | } |
| 2202 | up_read(&tty->termios_rwsem); | 2202 | if (signal_pending(current)) { |
| 2203 | retval = -ERESTARTSYS; | ||
| 2204 | break; | ||
| 2205 | } | ||
| 2206 | n_tty_set_room(tty); | ||
| 2207 | up_read(&tty->termios_rwsem); | ||
| 2203 | 2208 | ||
| 2204 | timeout = schedule_timeout(timeout); | 2209 | timeout = schedule_timeout(timeout); |
| 2205 | 2210 | ||
| 2206 | down_read(&tty->termios_rwsem); | 2211 | down_read(&tty->termios_rwsem); |
| 2207 | continue; | 2212 | continue; |
| 2213 | } | ||
| 2208 | } | 2214 | } |
| 2209 | __set_current_state(TASK_RUNNING); | 2215 | __set_current_state(TASK_RUNNING); |
| 2210 | 2216 | ||
