Use msleep_interruptible() instead of schedule_timeout() in send_break() to guarantee the task delays as expected. Change @duration's units to milliseconds, and modify arguments in callers appropriately. Patch is compile-tested. Signed-off-by: Nishanth Aravamudan Signed-off-by: Domen Puncer --- kj-domen/drivers/char/tty_io.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff -puN drivers/char/tty_io.c~msleep-drivers_char_tty_io drivers/char/tty_io.c --- kj/drivers/char/tty_io.c~msleep-drivers_char_tty_io 2005-04-05 12:57:10.000000000 +0200 +++ kj-domen/drivers/char/tty_io.c 2005-04-05 12:57:10.000000000 +0200 @@ -94,6 +94,7 @@ #include #include #include +#include #include #include @@ -2169,12 +2170,11 @@ static int tiocsetd(struct tty_struct *t return tty_set_ldisc(tty, ldisc); } -static int send_break(struct tty_struct *tty, int duration) +static int send_break(struct tty_struct *tty, unsigned int duration) { tty->driver->break_ctl(tty, -1); if (!signal_pending(current)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(duration); + msleep_interruptible(duration); } tty->driver->break_ctl(tty, 0); if (signal_pending(current)) @@ -2355,10 +2355,10 @@ int tty_ioctl(struct inode * inode, stru * all by anyone? */ if (!arg) - return send_break(tty, HZ/4); + return send_break(tty, 250); return 0; case TCSBRKP: /* support for POSIX tcsendbreak() */ - return send_break(tty, arg ? arg*(HZ/10) : HZ/4); + return send_break(tty, arg ? arg*100 : 250); case TIOCMGET: return tty_tiocmget(tty, file, p); _