serial send_break duration fix
PATCH 1/1 serial send_break duration fix
Fix tty_io.c send_break() to assert break for proper duration. If driver break_ctl() changes task state, then break may end prematurely. USB serial driver break_ctl() sends a URB, changing task state to TASK_RUNNING.
Signed-off-by Paul Fulghum <[email protected]>
Signature · 20 lines
Paul Fulghum [email protected] --- linux-2.4.28-pre4/drivers/char/tty_io.c 2004-04-14 08:05:29.000000000 -0500 +++ b/drivers/char/tty_io.c 2004-10-21 15:55:40.516247240 -0500 @@ -1684,11 +1684,11 @@ static int tiocsetd(struct tty_struct *t static int send_break(struct tty_struct *tty, int duration) { - set_current_state(TASK_INTERRUPTIBLE); - tty->driver.break_ctl(tty, -1); - if (!signal_pending(current)) + if (!signal_pending(current)) { + set_current_state(TASK_INTERRUPTIBLE); schedule_timeout(duration); + } tty->driver.break_ctl(tty, 0); if (signal_pending(current)) return -EINTR;