forked from Minki/linux
[PATCH] char/tty_io: replace schedule_timeout() with msleep_interruptible()
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 <nacc@us.ibm.com> Signed-off-by: Domen Puncer <domen@coderock.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
d8eddb6204
commit
b20f3ae5f0
@ -94,6 +94,7 @@
|
||||
#include <linux/idr.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/system.h>
|
||||
@ -2180,12 +2181,11 @@ static int tiocsetd(struct tty_struct *tty, int __user *p)
|
||||
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))
|
||||
@ -2366,10 +2366,10 @@ int tty_ioctl(struct inode * inode, struct file * file,
|
||||
* 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);
|
||||
|
Loading…
Reference in New Issue
Block a user