aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/synclinkmp.c
diff options
context:
space:
mode:
authorAlan Cox <alan@linux.intel.com>2012-07-14 10:31:47 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-07-16 16:00:41 -0400
commitadc8d746caa67fff4b53ba3e5163a6cbacc3b523 (patch)
treee3f6c05f27c163b369ddd4da5f31d2a61bde6d3a /drivers/tty/synclinkmp.c
parent6d31a88cb2e01d46c0cb74aa5da529e1f92ae3db (diff)
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>
Diffstat (limited to 'drivers/tty/synclinkmp.c')
-rw-r--r--drivers/tty/synclinkmp.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/tty/synclinkmp.c b/drivers/tty/synclinkmp.c
index a3dddc12d2fe..ae75a3c21fd3 100644
--- a/drivers/tty/synclinkmp.c
+++ b/drivers/tty/synclinkmp.c
@@ -873,7 +873,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios)
873 873
874 /* Handle transition to B0 status */ 874 /* Handle transition to B0 status */
875 if (old_termios->c_cflag & CBAUD && 875 if (old_termios->c_cflag & CBAUD &&
876 !(tty->termios->c_cflag & CBAUD)) { 876 !(tty->termios.c_cflag & CBAUD)) {
877 info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR); 877 info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
878 spin_lock_irqsave(&info->lock,flags); 878 spin_lock_irqsave(&info->lock,flags);
879 set_signals(info); 879 set_signals(info);
@@ -882,9 +882,9 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios)
882 882
883 /* Handle transition away from B0 status */ 883 /* Handle transition away from B0 status */
884 if (!(old_termios->c_cflag & CBAUD) && 884 if (!(old_termios->c_cflag & CBAUD) &&
885 tty->termios->c_cflag & CBAUD) { 885 tty->termios.c_cflag & CBAUD) {
886 info->serial_signals |= SerialSignal_DTR; 886 info->serial_signals |= SerialSignal_DTR;
887 if (!(tty->termios->c_cflag & CRTSCTS) || 887 if (!(tty->termios.c_cflag & CRTSCTS) ||
888 !test_bit(TTY_THROTTLED, &tty->flags)) { 888 !test_bit(TTY_THROTTLED, &tty->flags)) {
889 info->serial_signals |= SerialSignal_RTS; 889 info->serial_signals |= SerialSignal_RTS;
890 } 890 }
@@ -895,7 +895,7 @@ static void set_termios(struct tty_struct *tty, struct ktermios *old_termios)
895 895
896 /* Handle turning off CRTSCTS */ 896 /* Handle turning off CRTSCTS */
897 if (old_termios->c_cflag & CRTSCTS && 897 if (old_termios->c_cflag & CRTSCTS &&
898 !(tty->termios->c_cflag & CRTSCTS)) { 898 !(tty->termios.c_cflag & CRTSCTS)) {
899 tty->hw_stopped = 0; 899 tty->hw_stopped = 0;
900 tx_release(tty); 900 tx_release(tty);
901 } 901 }
@@ -1473,7 +1473,7 @@ static void throttle(struct tty_struct * tty)
1473 if (I_IXOFF(tty)) 1473 if (I_IXOFF(tty))
1474 send_xchar(tty, STOP_CHAR(tty)); 1474 send_xchar(tty, STOP_CHAR(tty));
1475 1475
1476 if (tty->termios->c_cflag & CRTSCTS) { 1476 if (tty->termios.c_cflag & CRTSCTS) {
1477 spin_lock_irqsave(&info->lock,flags); 1477 spin_lock_irqsave(&info->lock,flags);
1478 info->serial_signals &= ~SerialSignal_RTS; 1478 info->serial_signals &= ~SerialSignal_RTS;
1479 set_signals(info); 1479 set_signals(info);
@@ -1502,7 +1502,7 @@ static void unthrottle(struct tty_struct * tty)
1502 send_xchar(tty, START_CHAR(tty)); 1502 send_xchar(tty, START_CHAR(tty));
1503 } 1503 }
1504 1504
1505 if (tty->termios->c_cflag & CRTSCTS) { 1505 if (tty->termios.c_cflag & CRTSCTS) {
1506 spin_lock_irqsave(&info->lock,flags); 1506 spin_lock_irqsave(&info->lock,flags);
1507 info->serial_signals |= SerialSignal_RTS; 1507 info->serial_signals |= SerialSignal_RTS;
1508 set_signals(info); 1508 set_signals(info);
@@ -2708,7 +2708,7 @@ static void shutdown(SLMP_INFO * info)
2708 2708
2709 reset_port(info); 2709 reset_port(info);
2710 2710
2711 if (!info->port.tty || info->port.tty->termios->c_cflag & HUPCL) { 2711 if (!info->port.tty || info->port.tty->termios.c_cflag & HUPCL) {
2712 info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS); 2712 info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
2713 set_signals(info); 2713 set_signals(info);
2714 } 2714 }
@@ -2749,7 +2749,7 @@ static void program_hw(SLMP_INFO *info)
2749 2749
2750 get_signals(info); 2750 get_signals(info);
2751 2751
2752 if (info->netcount || (info->port.tty && info->port.tty->termios->c_cflag & CREAD) ) 2752 if (info->netcount || (info->port.tty && info->port.tty->termios.c_cflag & CREAD) )
2753 rx_start(info); 2753 rx_start(info);
2754 2754
2755 spin_unlock_irqrestore(&info->lock,flags); 2755 spin_unlock_irqrestore(&info->lock,flags);
@@ -2762,14 +2762,14 @@ static void change_params(SLMP_INFO *info)
2762 unsigned cflag; 2762 unsigned cflag;
2763 int bits_per_char; 2763 int bits_per_char;
2764 2764
2765 if (!info->port.tty || !info->port.tty->termios) 2765 if (!info->port.tty)
2766 return; 2766 return;
2767 2767
2768 if (debug_level >= DEBUG_LEVEL_INFO) 2768 if (debug_level >= DEBUG_LEVEL_INFO)
2769 printk("%s(%d):%s change_params()\n", 2769 printk("%s(%d):%s change_params()\n",
2770 __FILE__,__LINE__, info->device_name ); 2770 __FILE__,__LINE__, info->device_name );
2771 2771
2772 cflag = info->port.tty->termios->c_cflag; 2772 cflag = info->port.tty->termios.c_cflag;
2773 2773
2774 /* if B0 rate (hangup) specified then negate DTR and RTS */ 2774 /* if B0 rate (hangup) specified then negate DTR and RTS */
2775 /* otherwise assert DTR and RTS */ 2775 /* otherwise assert DTR and RTS */
@@ -3306,7 +3306,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
3306 return 0; 3306 return 0;
3307 } 3307 }
3308 3308
3309 if (tty->termios->c_cflag & CLOCAL) 3309 if (tty->termios.c_cflag & CLOCAL)
3310 do_clocal = true; 3310 do_clocal = true;
3311 3311
3312 /* Wait for carrier detect and the line to become 3312 /* Wait for carrier detect and the line to become
@@ -3332,7 +3332,7 @@ static int block_til_ready(struct tty_struct *tty, struct file *filp,
3332 port->blocked_open++; 3332 port->blocked_open++;
3333 3333
3334 while (1) { 3334 while (1) {
3335 if (tty->termios->c_cflag & CBAUD) 3335 if (tty->termios.c_cflag & CBAUD)
3336 tty_port_raise_dtr_rts(port); 3336 tty_port_raise_dtr_rts(port);
3337 3337
3338 set_current_state(TASK_INTERRUPTIBLE); 3338 set_current_state(TASK_INTERRUPTIBLE);