From: Domen Puncer 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 Signed-off-by: Andrew Morton --- 25-akpm/drivers/char/tty_io.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff -puN drivers/char/tty_io.c~char-tty_io-replace-schedule_timeout-with-msleep_interruptible drivers/char/tty_io.c --- 25/drivers/char/tty_io.c~char-tty_io-replace-schedule_timeout-with-msleep_interruptible 2005-03-19 13:50:07.000000000 -0800 +++ 25-akpm/drivers/char/tty_io.c 2005-03-19 13:50:07.000000000 -0800 @@ -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); _