summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordrahn <drahn@openbsd.org>2008-12-15 22:30:17 +0000
committerdrahn <drahn@openbsd.org>2008-12-15 22:30:17 +0000
commitfb16e992ffdac6dff41a16dc89ac6ea63dfcf7ac (patch)
tree101b2569ca6e7759268a6e1d5abfcb0a42444878
parentUnbreak netstat, reflecting kernel changes. (diff)
downloadwireguard-openbsd-fb16e992ffdac6dff41a16dc89ac6ea63dfcf7ac.tar.xz
wireguard-openbsd-fb16e992ffdac6dff41a16dc89ac6ea63dfcf7ac.zip
Let tty subsystem know when transmit is finished so ioctls do not hang.
-rw-r--r--sys/arch/arm/s3c2xx0/sscom.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/sys/arch/arm/s3c2xx0/sscom.c b/sys/arch/arm/s3c2xx0/sscom.c
index 8c1abac25d9..53b02cdf19b 100644
--- a/sys/arch/arm/s3c2xx0/sscom.c
+++ b/sys/arch/arm/s3c2xx0/sscom.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sscom.c,v 1.4 2008/12/08 20:50:20 drahn Exp $ */
+/* $OpenBSD: sscom.c,v 1.5 2008/12/15 22:30:17 drahn Exp $ */
/* $NetBSD: sscom.c,v 1.29 2008/06/11 22:37:21 cegger Exp $ */
/*
@@ -1217,7 +1217,7 @@ sscomparam(struct tty *tp, struct termios *t)
sc->sc_ubrdiv = ospeed;
/* And copy to tty. */
- tp->t_ispeed = 0;
+ tp->t_ispeed = t->c_ispeed;
tp->t_ospeed = t->c_ospeed;
tp->t_cflag = t->c_cflag;
@@ -1407,8 +1407,12 @@ out:
/* Enable transmit completion interrupts if necessary. */
if (tp->t_outq.c_cc != 0)
sscom_enable_txint(sc);
- else
+ else {
+ if (ISSET(tp->t_state, TS_BUSY)) {
+ CLR(tp->t_state, TS_BUSY | TS_FLUSH);
+ }
sscom_disable_txint(sc); /* track state in software? */
+ }
splx(s);
return;
@@ -1969,6 +1973,10 @@ sscomtxintr(void *arg)
}
(*linesw[tp->t_line].l_start)(tp);
} else {
+ struct tty *tp = sc->sc_tty;
+ if (ISSET(tp->t_state, TS_BUSY)) {
+ CLR(tp->t_state, TS_BUSY | TS_FLUSH);
+ }
sscom_disable_txint(sc);
}
#endif