tty: early return from send_break() on TTY_DRIVER_HARDWARE_BREAK
If the driver sets TTY_DRIVER_HARDWARE_BREAK, we leave ops->break_ctl() to the driver and return from send_break(). But we do it using a local variable and keep the code flowing through the end of the function. Instead, do 'return' immediately with the ops->break_ctl()'s return value. This way, we don't have to stuff the 'else' branch of the 'if' with the software break handling. And we can re-indent the function too. Signed-off-by: "Jiri Slaby (SUSE)" <jirislaby@kernel.org> Link: https://lore.kernel.org/r/20230919085156.1578-14-jirislaby@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e5d0424ac3
commit
66619686d1
@ -2475,22 +2475,24 @@ static int send_break(struct tty_struct *tty, unsigned int duration)
|
||||
return 0;
|
||||
|
||||
if (tty->driver->flags & TTY_DRIVER_HARDWARE_BREAK)
|
||||
retval = tty->ops->break_ctl(tty, duration);
|
||||
else {
|
||||
/* Do the work ourselves */
|
||||
if (tty_write_lock(tty, false) < 0)
|
||||
return -EINTR;
|
||||
retval = tty->ops->break_ctl(tty, -1);
|
||||
if (retval)
|
||||
goto out;
|
||||
if (!signal_pending(current))
|
||||
msleep_interruptible(duration);
|
||||
retval = tty->ops->break_ctl(tty, 0);
|
||||
return tty->ops->break_ctl(tty, duration);
|
||||
|
||||
/* Do the work ourselves */
|
||||
if (tty_write_lock(tty, false) < 0)
|
||||
return -EINTR;
|
||||
|
||||
retval = tty->ops->break_ctl(tty, -1);
|
||||
if (retval)
|
||||
goto out;
|
||||
if (!signal_pending(current))
|
||||
msleep_interruptible(duration);
|
||||
retval = tty->ops->break_ctl(tty, 0);
|
||||
out:
|
||||
tty_write_unlock(tty);
|
||||
if (signal_pending(current))
|
||||
retval = -EINTR;
|
||||
}
|
||||
tty_write_unlock(tty);
|
||||
|
||||
if (signal_pending(current))
|
||||
retval = -EINTR;
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user