tty: move the termios object into the tty
This will let us sort out a whole pile of tty related races. The alternative would be to keep points and refcount the termios objects. However 1. They are tiny anyway 2. Many devices don't use the stored copies 3. We can remove a pty special case Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Este cometimento está contido em:

cometido por
Greg Kroah-Hartman

ascendente
6d31a88cb2
cometimento
adc8d746ca
@@ -687,8 +687,8 @@ static void digi_set_termios(struct tty_struct *tty,
|
||||
struct usb_serial_port *port, struct ktermios *old_termios)
|
||||
{
|
||||
struct digi_port *priv = usb_get_serial_port_data(port);
|
||||
unsigned int iflag = tty->termios->c_iflag;
|
||||
unsigned int cflag = tty->termios->c_cflag;
|
||||
unsigned int iflag = tty->termios.c_iflag;
|
||||
unsigned int cflag = tty->termios.c_cflag;
|
||||
unsigned int old_iflag = old_termios->c_iflag;
|
||||
unsigned int old_cflag = old_termios->c_cflag;
|
||||
unsigned char buf[32];
|
||||
@@ -709,7 +709,7 @@ static void digi_set_termios(struct tty_struct *tty,
|
||||
/* don't set RTS if using hardware flow control */
|
||||
/* and throttling input */
|
||||
modem_signals = TIOCM_DTR;
|
||||
if (!(tty->termios->c_cflag & CRTSCTS) ||
|
||||
if (!(tty->termios.c_cflag & CRTSCTS) ||
|
||||
!test_bit(TTY_THROTTLED, &tty->flags))
|
||||
modem_signals |= TIOCM_RTS;
|
||||
digi_set_modem_signals(port, modem_signals, 1);
|
||||
@@ -748,7 +748,7 @@ static void digi_set_termios(struct tty_struct *tty,
|
||||
}
|
||||
}
|
||||
/* set parity */
|
||||
tty->termios->c_cflag &= ~CMSPAR;
|
||||
tty->termios.c_cflag &= ~CMSPAR;
|
||||
|
||||
if ((cflag&(PARENB|PARODD)) != (old_cflag&(PARENB|PARODD))) {
|
||||
if (cflag&PARENB) {
|
||||
@@ -1124,8 +1124,8 @@ static int digi_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
|
||||
/* set termios settings */
|
||||
if (tty) {
|
||||
not_termios.c_cflag = ~tty->termios->c_cflag;
|
||||
not_termios.c_iflag = ~tty->termios->c_iflag;
|
||||
not_termios.c_cflag = ~tty->termios.c_cflag;
|
||||
not_termios.c_iflag = ~tty->termios.c_iflag;
|
||||
digi_set_termios(tty, port, ¬_termios);
|
||||
}
|
||||
return 0;
|
||||
@@ -1500,7 +1500,7 @@ static int digi_read_oob_callback(struct urb *urb)
|
||||
|
||||
rts = 0;
|
||||
if (tty)
|
||||
rts = tty->termios->c_cflag & CRTSCTS;
|
||||
rts = tty->termios.c_cflag & CRTSCTS;
|
||||
|
||||
if (tty && opcode == DIGI_CMD_READ_INPUT_SIGNALS) {
|
||||
spin_lock(&priv->dp_port_lock);
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador