aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/char/riscom8.c
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2008-04-30 03:53:59 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-30 11:29:45 -0400
commit978e595f88a1fba5869aa42a4af4fba36f33ecac (patch)
tree60848f49949c5b7b518621ee36cdc6d500244539 /drivers/char/riscom8.c
parentac0e4b7d319bf284bb64bc7e1c051417386b34a4 (diff)
tty/serial: lay the foundations for the next set of reworks
- Stop drivers calling their own flush method indirectly, it obfuscates code and it will change soon anyway - A few more lock_kernel paths temporarily needed in some driver internal waiting code - Remove private put_char method that does a write call for one char - we have that anyway - Most but not yet all of the termios copy under lock fixing (some has other dependencies to follow) - Note a few locking bugs in drivers found in the process - Kill remaining [ab]users of TIOCG/SSOFTCAR in the driver, these must go to fix the termios locking Signed-off-by: Alan Cox <alan@redhat.com> Cc: Jiri Slaby <jirislaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/char/riscom8.c')
-rw-r--r--drivers/char/riscom8.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/drivers/char/riscom8.c b/drivers/char/riscom8.c
index b56e0e04cb4a..a82c2a2d5e6c 100644
--- a/drivers/char/riscom8.c
+++ b/drivers/char/riscom8.c
@@ -1015,6 +1015,24 @@ static int rc_open(struct tty_struct * tty, struct file * filp)
1015 return 0; 1015 return 0;
1016} 1016}
1017 1017
1018static void rc_flush_buffer(struct tty_struct *tty)
1019{
1020 struct riscom_port *port = (struct riscom_port *)tty->driver_data;
1021 unsigned long flags;
1022
1023 if (rc_paranoia_check(port, tty->name, "rc_flush_buffer"))
1024 return;
1025
1026 spin_lock_irqsave(&riscom_lock, flags);
1027
1028 port->xmit_cnt = port->xmit_head = port->xmit_tail = 0;
1029
1030 spin_unlock_irqrestore(&riscom_lock, flags);
1031
1032 tty_wakeup(tty);
1033}
1034
1035
1018static void rc_close(struct tty_struct * tty, struct file * filp) 1036static void rc_close(struct tty_struct * tty, struct file * filp)
1019{ 1037{
1020 struct riscom_port *port = (struct riscom_port *) tty->driver_data; 1038 struct riscom_port *port = (struct riscom_port *) tty->driver_data;
@@ -1078,8 +1096,7 @@ static void rc_close(struct tty_struct * tty, struct file * filp)
1078 } 1096 }
1079 } 1097 }
1080 rc_shutdown_port(bp, port); 1098 rc_shutdown_port(bp, port);
1081 if (tty->driver->flush_buffer) 1099 rc_flush_buffer(tty);
1082 tty->driver->flush_buffer(tty);
1083 tty_ldisc_flush(tty); 1100 tty_ldisc_flush(tty);
1084 1101
1085 tty->closing = 0; 1102 tty->closing = 0;
@@ -1213,23 +1230,6 @@ static int rc_chars_in_buffer(struct tty_struct *tty)
1213 return port->xmit_cnt; 1230 return port->xmit_cnt;
1214} 1231}
1215 1232
1216static void rc_flush_buffer(struct tty_struct *tty)
1217{
1218 struct riscom_port *port = (struct riscom_port *)tty->driver_data;
1219 unsigned long flags;
1220
1221 if (rc_paranoia_check(port, tty->name, "rc_flush_buffer"))
1222 return;
1223
1224 spin_lock_irqsave(&riscom_lock, flags);
1225
1226 port->xmit_cnt = port->xmit_head = port->xmit_tail = 0;
1227
1228 spin_unlock_irqrestore(&riscom_lock, flags);
1229
1230 tty_wakeup(tty);
1231}
1232
1233static int rc_tiocmget(struct tty_struct *tty, struct file *file) 1233static int rc_tiocmget(struct tty_struct *tty, struct file *file)
1234{ 1234{
1235 struct riscom_port *port = (struct riscom_port *)tty->driver_data; 1235 struct riscom_port *port = (struct riscom_port *)tty->driver_data;