diff options
author | Peter Hurley <peter@hurleysoftware.com> | 2014-10-16 15:33:29 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-11-05 16:34:36 -0800 |
commit | 1aa1bf1115272d22fc4c758ee8769b73d8079a79 (patch) | |
tree | 880cd64a703772ce11bae136ac50ed2330a10803 /tools | |
parent | 4ed60fc257185dbb0daea7cd3e4289d1658b11f6 (diff) | |
download | op-kernel-dev-1aa1bf1115272d22fc4c758ee8769b73d8079a79.zip op-kernel-dev-1aa1bf1115272d22fc4c758ee8769b73d8079a79.tar.gz |
tty: Fix missed wakeup from packet mode status update
The pty master read() can miss the wake up for a packet mode
status change. For example,
CPU 0 | CPU 1
n_tty_read() | n_tty_packet_mode_flush()
... | .
if (packet & link->ctrl_status) { | .
/* no new ctrl_status ATM */ | .
| spin_lock
| ctrl_status |= TIOCPKT_FLUSHREAD
| spin_unlock
| wake_up(link->read_wait)
} |
set_current_state(TASK_INTERRUPTIBLE) |
... |
The pty master read() will now sleep (assuming there is no input) having
missed the read_wait wakeup.
Set the task state before the condition test.
Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Reviewed-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'tools')
0 files changed, 0 insertions, 0 deletions