summaryrefslogtreecommitdiffstats
path: root/sys/dev/cy
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2001-12-18 00:27:18 +0000
committerjhb <jhb@FreeBSD.org>2001-12-18 00:27:18 +0000
commita3b98398cbfb4b809f8577b6a95aabb2c30a1aeb (patch)
treebd1f842c61588e8478e798dece6dff8b2be41310 /sys/dev/cy
parent090c933e94e7345e9c9e9a9fbe29ea6c8397a662 (diff)
downloadFreeBSD-src-a3b98398cbfb4b809f8577b6a95aabb2c30a1aeb.zip
FreeBSD-src-a3b98398cbfb4b809f8577b6a95aabb2c30a1aeb.tar.gz
Modify the critical section API as follows:
- The MD functions critical_enter/exit are renamed to start with a cpu_ prefix. - MI wrapper functions critical_enter/exit maintain a per-thread nesting count and a per-thread critical section saved state set when entering a critical section while at nesting level 0 and restored when exiting to nesting level 0. This moves the saved state out of spin mutexes so that interlocking spin mutexes works properly. - Most low-level MD code that used critical_enter/exit now use cpu_critical_enter/exit. MI code such as device drivers and spin mutexes use the MI wrappers. Note that since the MI wrappers store the state in the current thread, they do not have any return values or arguments. - mtx_intr_enable() is replaced with a constant CRITICAL_FORK which is assigned to curthread->td_savecrit during fork_exit(). Tested on: i386, alpha
Diffstat (limited to 'sys/dev/cy')
-rw-r--r--sys/dev/cy/cy.c127
-rw-r--r--sys/dev/cy/cy_isa.c127
2 files changed, 112 insertions, 142 deletions
diff --git a/sys/dev/cy/cy.c b/sys/dev/cy/cy.c
index 20316ad..0510e72 100644
--- a/sys/dev/cy/cy.c
+++ b/sys/dev/cy/cy.c
@@ -356,7 +356,7 @@ static int cd_getreg __P((struct com_s *com, int reg));
static void cd_setreg __P((struct com_s *com, int reg, int val));
static timeout_t siodtrwakeup;
static void comhardclose __P((struct com_s *com));
-static void sioinput __P((struct com_s *com, critical_t *savecrit));
+static void sioinput __P((struct com_s *com));
#if 0
static void siointr1 __P((struct com_s *com));
#endif
@@ -673,7 +673,6 @@ sioopen(dev, flag, mode, td)
int s;
struct tty *tp;
int unit;
- critical_t savecrit;
mynor = minor(dev);
unit = MINOR_TO_UNIT(mynor);
@@ -775,7 +774,7 @@ open_top:
}
}
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
(void) inb(com->line_status_port);
(void) inb(com->data_port);
@@ -784,7 +783,7 @@ open_top:
outb(iobase + com_ier, IER_ERXRDY | IER_ETXRDY | IER_ERLS
| IER_EMSC);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#else /* !0 */
/*
* Flush fifos. This requires a full channel reset which
@@ -795,7 +794,7 @@ open_top:
CD1400_CCR_CMDRESET | CD1400_CCR_CHANRESET);
cd1400_channel_cmd(com, com->channel_control);
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->prev_modem_status = com->last_modem_status
= cd_getreg(com, CD1400_MSVR2);
@@ -803,7 +802,7 @@ open_top:
com->intr_enable
= CD1400_SRER_MDMCH | CD1400_SRER_RXDATA);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif /* 0 */
/*
* Handle initial DCD. Callout devices get a fake initial
@@ -886,7 +885,6 @@ comhardclose(com)
int s;
struct tty *tp;
int unit;
- critical_t savecrit;
unit = com->unit;
iobase = com->iobase;
@@ -900,12 +898,12 @@ comhardclose(com)
outb(iobase + com_cfcr, com->cfcr_image &= ~CFCR_SBREAK);
#else
/* XXX */
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->etc = ETC_NONE;
cd_setreg(com, CD1400_COR2, com->cor[1] &= ~CD1400_COR2_ETC);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
cd1400_channel_cmd(com, CD1400_CCR_CMDRESET | CD1400_CCR_FTF);
#endif
@@ -913,11 +911,11 @@ comhardclose(com)
#if 0
outb(iobase + com_ier, 0);
#else
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
cd_setreg(com, CD1400_SRER, com->intr_enable = 0);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif
tp = com->tp;
if ((tp->t_cflag & HUPCL)
@@ -1013,9 +1011,8 @@ siodtrwakeup(chan)
* b) needs to return with COM_LOCK() held.
*/
static void
-sioinput(com, savecrit)
+sioinput(com)
struct com_s *com;
- critical_t *savecrit;
{
u_char *buf;
int incc;
@@ -1046,7 +1043,7 @@ sioinput(com, savecrit)
* that are used everywhere else.
*/
COM_UNLOCK();
- critical_exit(*savecrit);
+ critical_exit();
incc = com->iptr - buf;
if (tp->t_rawq.c_cc + incc > tp->t_ihiwat
&& (com->state & CS_RTS_IFLOW
@@ -1067,7 +1064,7 @@ sioinput(com, savecrit)
tp->t_lflag &= ~FLUSHO;
comstart(tp);
}
- *savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
} while (buf < com->iptr);
} else {
@@ -1078,7 +1075,7 @@ sioinput(com, savecrit)
* that are used everywhere else.
*/
COM_UNLOCK();
- critical_exit(*savecrit);
+ critical_exit();
line_status = buf[com->ierroff];
recv_data = *buf++;
if (line_status
@@ -1093,7 +1090,7 @@ sioinput(com, savecrit)
recv_data |= TTY_PE;
}
(*linesw[tp->t_line].l_rint)(recv_data, tp);
- *savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
} while (buf < com->iptr);
}
@@ -1767,7 +1764,6 @@ static void
siopoll(void *arg)
{
int unit;
- critical_t savecrit;
#ifdef CyDebug
++cy_timeouts;
@@ -1790,7 +1786,7 @@ repeat:
* (actually never opened devices) so that we don't
* loop.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
incc = com->iptr - com->ibuf;
com->iptr = com->ibuf;
@@ -1800,7 +1796,7 @@ repeat:
}
com_events -= incc;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (incc != 0)
log(LOG_DEBUG,
"sio%d: %d events for device with no tp\n",
@@ -1808,36 +1804,36 @@ repeat:
continue;
}
if (com->iptr != com->ibuf) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
- sioinput(com, &savecrit);
+ sioinput(com);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
if (com->state & CS_CHECKMSR) {
u_char delta_modem_status;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
- sioinput(com, &savecrit);
+ sioinput(com);
delta_modem_status = com->last_modem_status
^ com->prev_modem_status;
com->prev_modem_status = com->last_modem_status;
com_events -= LOTS_OF_EVENTS;
com->state &= ~CS_CHECKMSR;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (delta_modem_status & MSR_DCD)
(*linesw[tp->t_line].l_modem)
(tp, com->prev_modem_status & MSR_DCD);
}
if (com->extra_state & CSE_ODONE) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com_events -= LOTS_OF_EVENTS;
com->extra_state &= ~CSE_ODONE;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (!(com->state & CS_BUSY)) {
tp->t_state &= ~TS_BUSY;
ttwwakeup(com->tp);
@@ -1849,12 +1845,12 @@ repeat:
}
}
if (com->state & CS_ODONE) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com_events -= LOTS_OF_EVENTS;
com->state &= ~CS_ODONE;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
(*linesw[tp->t_line].l_start)(tp);
}
if (com_events == 0)
@@ -1883,7 +1879,6 @@ comparam(tp, t)
u_char opt;
int s;
int unit;
- critical_t savecrit;
/* do historical conversions */
if (t->c_ispeed == 0)
@@ -2031,14 +2026,14 @@ comparam(tp, t)
if (cflag & CCTS_OFLOW)
opt |= CD1400_COR2_CCTS_OFLOW;
#endif
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (opt != com->cor[1]) {
cor_change |= CD1400_CCR_COR2;
cd_setreg(com, CD1400_COR2, com->cor[1] = opt);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
/*
* set channel option register 3 -
@@ -2159,7 +2154,7 @@ comparam(tp, t)
* XXX should have done this long ago, but there is too much state
* to change all atomically.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->state &= ~CS_TTGO;
@@ -2227,7 +2222,7 @@ comparam(tp, t)
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
splx(s);
comstart(tp);
if (com->ibufold != NULL) {
@@ -2246,7 +2241,6 @@ siosetwater(com, speed)
u_char *ibuf;
int ibufsize;
struct tty *tp;
- critical_t savecrit;
/*
* Make the buffer size large enough to handle a softtty interrupt
@@ -2284,10 +2278,10 @@ siosetwater(com, speed)
* Read current input buffer, if any. Continue with interrupts
* disabled.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->iptr != com->ibuf)
- sioinput(com, &savecrit);
+ sioinput(com);
/*-
* Initialize critical variables, including input buffer watermarks.
@@ -2306,7 +2300,7 @@ siosetwater(com, speed)
com->ihighwater = ibuf + 3 * ibufsize / 4;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (0);
}
@@ -2320,7 +2314,6 @@ comstart(tp)
bool_t started;
#endif
int unit;
- critical_t savecrit;
unit = DEV_TO_UNIT(tp->t_dev);
com = com_addr(unit);
@@ -2331,7 +2324,7 @@ comstart(tp)
started = FALSE;
#endif
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (tp->t_state & TS_TTSTOP) {
com->state &= ~CS_TTGO;
@@ -2369,7 +2362,7 @@ comstart(tp)
#endif
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (tp->t_state & (TS_TIMEOUT | TS_TTSTOP)) {
ttwwakeup(tp);
splx(s);
@@ -2388,7 +2381,7 @@ comstart(tp)
sizeof com->obuf1);
com->obufs[0].l_next = NULL;
com->obufs[0].l_queued = TRUE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state & CS_BUSY) {
qp = com->obufq.l_next;
@@ -2409,7 +2402,7 @@ comstart(tp)
| CD1400_SRER_TXRDY);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
if (tp->t_outq.c_cc != 0 && !com->obufs[1].l_queued) {
#ifdef CyDebug
@@ -2420,7 +2413,7 @@ comstart(tp)
sizeof com->obuf2);
com->obufs[1].l_next = NULL;
com->obufs[1].l_queued = TRUE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state & CS_BUSY) {
qp = com->obufq.l_next;
@@ -2441,7 +2434,7 @@ comstart(tp)
| CD1400_SRER_TXRDY);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
tp->t_state |= TS_BUSY;
}
@@ -2450,12 +2443,12 @@ comstart(tp)
++com->start_real;
#endif
#if 0
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state >= (CS_BUSY | CS_TTGO))
siointr1(com); /* fake interrupt to start output */
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif
ttwwakeup(tp);
splx(s);
@@ -2468,11 +2461,10 @@ comstop(tp, rw)
{
struct com_s *com;
bool_t wakeup_etc;
- critical_t savecrit;
com = com_addr(DEV_TO_UNIT(tp->t_dev));
wakeup_etc = FALSE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (rw & FWRITE) {
com->obufs[0].l_queued = FALSE;
@@ -2497,7 +2489,7 @@ comstop(tp, rw)
com->iptr = com->ibuf;
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (wakeup_etc)
wakeup(&com->etc);
if (rw & FWRITE && com->etc == ETC_NONE)
@@ -2513,7 +2505,6 @@ commctl(com, bits, how)
{
int mcr;
int msr;
- critical_t savecrit;
if (how == DMGET) {
if (com->channel_control & CD1400_CCR_RCVEN)
@@ -2551,7 +2542,7 @@ commctl(com, bits, how)
mcr |= com->mcr_dtr;
if (bits & TIOCM_RTS)
mcr |= com->mcr_rts;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
switch (how) {
case DMSET:
@@ -2571,7 +2562,7 @@ commctl(com, bits, how)
break;
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (0);
}
@@ -2633,13 +2624,11 @@ comwakeup(chan)
com = com_addr(unit);
if (com != NULL
&& (com->state >= (CS_BUSY | CS_TTGO) || com->poll)) {
- critical_t savecrit;
-
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
siointr1(com);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
}
#endif
@@ -2659,14 +2648,13 @@ comwakeup(chan)
for (errnum = 0; errnum < CE_NTYPES; ++errnum) {
u_int delta;
u_long total;
- critical_t savecrit;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
delta = com->delta_error_counts[errnum];
com->delta_error_counts[errnum] = 0;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (delta == 0)
continue;
total = com->error_counts[errnum] += delta;
@@ -2818,7 +2806,6 @@ cd_etc(com, etc)
struct com_s *com;
int etc;
{
- critical_t savecrit;
/*
* We can't change the hardware's ETC state while there are any
@@ -2831,7 +2818,7 @@ cd_etc(com, etc)
* for the tx to become empty so that the command is sure to be
* executed soon after we issue it.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->etc == etc)
goto wait;
@@ -2842,7 +2829,7 @@ cd_etc(com, etc)
&& (com->etc == ETC_BREAK_ENDING || com->etc == ETC_BREAK_ENDED
|| com->etc == ETC_NONE))) {
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return;
}
com->etc = etc;
@@ -2851,7 +2838,7 @@ cd_etc(com, etc)
= (com->intr_enable & ~CD1400_SRER_TXRDY) | CD1400_SRER_TXMPTY);
wait:
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
while (com->etc == etc
&& tsleep(&com->etc, TTIPRI | PCATCH, "cyetc", 0) == 0)
continue;
@@ -2865,7 +2852,6 @@ cd_getreg(com, reg)
struct com_s *basecom;
u_char car;
int cy_align;
- critical_t savecrit;
register_t eflags;
cy_addr iobase;
int val;
@@ -2875,7 +2861,7 @@ cd_getreg(com, reg)
cy_align = com->cy_align;
iobase = com->iobase;
eflags = read_eflags();
- savecrit = critical_enter();
+ critical_enter();
if (eflags & PSL_I)
COM_LOCK();
if (basecom->car != car)
@@ -2883,7 +2869,7 @@ cd_getreg(com, reg)
val = cd_inb(iobase, reg, cy_align);
if (eflags & PSL_I)
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (val);
}
@@ -2896,7 +2882,6 @@ cd_setreg(com, reg, val)
struct com_s *basecom;
u_char car;
int cy_align;
- critical_t savecrit;
register_t eflags;
cy_addr iobase;
@@ -2905,7 +2890,7 @@ cd_setreg(com, reg, val)
cy_align = com->cy_align;
iobase = com->iobase;
eflags = read_eflags();
- savecrit = critical_enter();
+ critical_enter();
if (eflags & PSL_I)
COM_LOCK();
if (basecom->car != car)
@@ -2913,7 +2898,7 @@ cd_setreg(com, reg, val)
cd_outb(iobase, reg, cy_align, val);
if (eflags & PSL_I)
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
#ifdef CyDebug
diff --git a/sys/dev/cy/cy_isa.c b/sys/dev/cy/cy_isa.c
index 20316ad..0510e72 100644
--- a/sys/dev/cy/cy_isa.c
+++ b/sys/dev/cy/cy_isa.c
@@ -356,7 +356,7 @@ static int cd_getreg __P((struct com_s *com, int reg));
static void cd_setreg __P((struct com_s *com, int reg, int val));
static timeout_t siodtrwakeup;
static void comhardclose __P((struct com_s *com));
-static void sioinput __P((struct com_s *com, critical_t *savecrit));
+static void sioinput __P((struct com_s *com));
#if 0
static void siointr1 __P((struct com_s *com));
#endif
@@ -673,7 +673,6 @@ sioopen(dev, flag, mode, td)
int s;
struct tty *tp;
int unit;
- critical_t savecrit;
mynor = minor(dev);
unit = MINOR_TO_UNIT(mynor);
@@ -775,7 +774,7 @@ open_top:
}
}
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
(void) inb(com->line_status_port);
(void) inb(com->data_port);
@@ -784,7 +783,7 @@ open_top:
outb(iobase + com_ier, IER_ERXRDY | IER_ETXRDY | IER_ERLS
| IER_EMSC);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#else /* !0 */
/*
* Flush fifos. This requires a full channel reset which
@@ -795,7 +794,7 @@ open_top:
CD1400_CCR_CMDRESET | CD1400_CCR_CHANRESET);
cd1400_channel_cmd(com, com->channel_control);
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->prev_modem_status = com->last_modem_status
= cd_getreg(com, CD1400_MSVR2);
@@ -803,7 +802,7 @@ open_top:
com->intr_enable
= CD1400_SRER_MDMCH | CD1400_SRER_RXDATA);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif /* 0 */
/*
* Handle initial DCD. Callout devices get a fake initial
@@ -886,7 +885,6 @@ comhardclose(com)
int s;
struct tty *tp;
int unit;
- critical_t savecrit;
unit = com->unit;
iobase = com->iobase;
@@ -900,12 +898,12 @@ comhardclose(com)
outb(iobase + com_cfcr, com->cfcr_image &= ~CFCR_SBREAK);
#else
/* XXX */
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->etc = ETC_NONE;
cd_setreg(com, CD1400_COR2, com->cor[1] &= ~CD1400_COR2_ETC);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
cd1400_channel_cmd(com, CD1400_CCR_CMDRESET | CD1400_CCR_FTF);
#endif
@@ -913,11 +911,11 @@ comhardclose(com)
#if 0
outb(iobase + com_ier, 0);
#else
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
cd_setreg(com, CD1400_SRER, com->intr_enable = 0);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif
tp = com->tp;
if ((tp->t_cflag & HUPCL)
@@ -1013,9 +1011,8 @@ siodtrwakeup(chan)
* b) needs to return with COM_LOCK() held.
*/
static void
-sioinput(com, savecrit)
+sioinput(com)
struct com_s *com;
- critical_t *savecrit;
{
u_char *buf;
int incc;
@@ -1046,7 +1043,7 @@ sioinput(com, savecrit)
* that are used everywhere else.
*/
COM_UNLOCK();
- critical_exit(*savecrit);
+ critical_exit();
incc = com->iptr - buf;
if (tp->t_rawq.c_cc + incc > tp->t_ihiwat
&& (com->state & CS_RTS_IFLOW
@@ -1067,7 +1064,7 @@ sioinput(com, savecrit)
tp->t_lflag &= ~FLUSHO;
comstart(tp);
}
- *savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
} while (buf < com->iptr);
} else {
@@ -1078,7 +1075,7 @@ sioinput(com, savecrit)
* that are used everywhere else.
*/
COM_UNLOCK();
- critical_exit(*savecrit);
+ critical_exit();
line_status = buf[com->ierroff];
recv_data = *buf++;
if (line_status
@@ -1093,7 +1090,7 @@ sioinput(com, savecrit)
recv_data |= TTY_PE;
}
(*linesw[tp->t_line].l_rint)(recv_data, tp);
- *savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
} while (buf < com->iptr);
}
@@ -1767,7 +1764,6 @@ static void
siopoll(void *arg)
{
int unit;
- critical_t savecrit;
#ifdef CyDebug
++cy_timeouts;
@@ -1790,7 +1786,7 @@ repeat:
* (actually never opened devices) so that we don't
* loop.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
incc = com->iptr - com->ibuf;
com->iptr = com->ibuf;
@@ -1800,7 +1796,7 @@ repeat:
}
com_events -= incc;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (incc != 0)
log(LOG_DEBUG,
"sio%d: %d events for device with no tp\n",
@@ -1808,36 +1804,36 @@ repeat:
continue;
}
if (com->iptr != com->ibuf) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
- sioinput(com, &savecrit);
+ sioinput(com);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
if (com->state & CS_CHECKMSR) {
u_char delta_modem_status;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
- sioinput(com, &savecrit);
+ sioinput(com);
delta_modem_status = com->last_modem_status
^ com->prev_modem_status;
com->prev_modem_status = com->last_modem_status;
com_events -= LOTS_OF_EVENTS;
com->state &= ~CS_CHECKMSR;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (delta_modem_status & MSR_DCD)
(*linesw[tp->t_line].l_modem)
(tp, com->prev_modem_status & MSR_DCD);
}
if (com->extra_state & CSE_ODONE) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com_events -= LOTS_OF_EVENTS;
com->extra_state &= ~CSE_ODONE;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (!(com->state & CS_BUSY)) {
tp->t_state &= ~TS_BUSY;
ttwwakeup(com->tp);
@@ -1849,12 +1845,12 @@ repeat:
}
}
if (com->state & CS_ODONE) {
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com_events -= LOTS_OF_EVENTS;
com->state &= ~CS_ODONE;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
(*linesw[tp->t_line].l_start)(tp);
}
if (com_events == 0)
@@ -1883,7 +1879,6 @@ comparam(tp, t)
u_char opt;
int s;
int unit;
- critical_t savecrit;
/* do historical conversions */
if (t->c_ispeed == 0)
@@ -2031,14 +2026,14 @@ comparam(tp, t)
if (cflag & CCTS_OFLOW)
opt |= CD1400_COR2_CCTS_OFLOW;
#endif
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (opt != com->cor[1]) {
cor_change |= CD1400_CCR_COR2;
cd_setreg(com, CD1400_COR2, com->cor[1] = opt);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
/*
* set channel option register 3 -
@@ -2159,7 +2154,7 @@ comparam(tp, t)
* XXX should have done this long ago, but there is too much state
* to change all atomically.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
com->state &= ~CS_TTGO;
@@ -2227,7 +2222,7 @@ comparam(tp, t)
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
splx(s);
comstart(tp);
if (com->ibufold != NULL) {
@@ -2246,7 +2241,6 @@ siosetwater(com, speed)
u_char *ibuf;
int ibufsize;
struct tty *tp;
- critical_t savecrit;
/*
* Make the buffer size large enough to handle a softtty interrupt
@@ -2284,10 +2278,10 @@ siosetwater(com, speed)
* Read current input buffer, if any. Continue with interrupts
* disabled.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->iptr != com->ibuf)
- sioinput(com, &savecrit);
+ sioinput(com);
/*-
* Initialize critical variables, including input buffer watermarks.
@@ -2306,7 +2300,7 @@ siosetwater(com, speed)
com->ihighwater = ibuf + 3 * ibufsize / 4;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (0);
}
@@ -2320,7 +2314,6 @@ comstart(tp)
bool_t started;
#endif
int unit;
- critical_t savecrit;
unit = DEV_TO_UNIT(tp->t_dev);
com = com_addr(unit);
@@ -2331,7 +2324,7 @@ comstart(tp)
started = FALSE;
#endif
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (tp->t_state & TS_TTSTOP) {
com->state &= ~CS_TTGO;
@@ -2369,7 +2362,7 @@ comstart(tp)
#endif
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (tp->t_state & (TS_TIMEOUT | TS_TTSTOP)) {
ttwwakeup(tp);
splx(s);
@@ -2388,7 +2381,7 @@ comstart(tp)
sizeof com->obuf1);
com->obufs[0].l_next = NULL;
com->obufs[0].l_queued = TRUE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state & CS_BUSY) {
qp = com->obufq.l_next;
@@ -2409,7 +2402,7 @@ comstart(tp)
| CD1400_SRER_TXRDY);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
if (tp->t_outq.c_cc != 0 && !com->obufs[1].l_queued) {
#ifdef CyDebug
@@ -2420,7 +2413,7 @@ comstart(tp)
sizeof com->obuf2);
com->obufs[1].l_next = NULL;
com->obufs[1].l_queued = TRUE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state & CS_BUSY) {
qp = com->obufq.l_next;
@@ -2441,7 +2434,7 @@ comstart(tp)
| CD1400_SRER_TXRDY);
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
tp->t_state |= TS_BUSY;
}
@@ -2450,12 +2443,12 @@ comstart(tp)
++com->start_real;
#endif
#if 0
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->state >= (CS_BUSY | CS_TTGO))
siointr1(com); /* fake interrupt to start output */
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
#endif
ttwwakeup(tp);
splx(s);
@@ -2468,11 +2461,10 @@ comstop(tp, rw)
{
struct com_s *com;
bool_t wakeup_etc;
- critical_t savecrit;
com = com_addr(DEV_TO_UNIT(tp->t_dev));
wakeup_etc = FALSE;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (rw & FWRITE) {
com->obufs[0].l_queued = FALSE;
@@ -2497,7 +2489,7 @@ comstop(tp, rw)
com->iptr = com->ibuf;
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (wakeup_etc)
wakeup(&com->etc);
if (rw & FWRITE && com->etc == ETC_NONE)
@@ -2513,7 +2505,6 @@ commctl(com, bits, how)
{
int mcr;
int msr;
- critical_t savecrit;
if (how == DMGET) {
if (com->channel_control & CD1400_CCR_RCVEN)
@@ -2551,7 +2542,7 @@ commctl(com, bits, how)
mcr |= com->mcr_dtr;
if (bits & TIOCM_RTS)
mcr |= com->mcr_rts;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
switch (how) {
case DMSET:
@@ -2571,7 +2562,7 @@ commctl(com, bits, how)
break;
}
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (0);
}
@@ -2633,13 +2624,11 @@ comwakeup(chan)
com = com_addr(unit);
if (com != NULL
&& (com->state >= (CS_BUSY | CS_TTGO) || com->poll)) {
- critical_t savecrit;
-
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
siointr1(com);
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
}
#endif
@@ -2659,14 +2648,13 @@ comwakeup(chan)
for (errnum = 0; errnum < CE_NTYPES; ++errnum) {
u_int delta;
u_long total;
- critical_t savecrit;
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
delta = com->delta_error_counts[errnum];
com->delta_error_counts[errnum] = 0;
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
if (delta == 0)
continue;
total = com->error_counts[errnum] += delta;
@@ -2818,7 +2806,6 @@ cd_etc(com, etc)
struct com_s *com;
int etc;
{
- critical_t savecrit;
/*
* We can't change the hardware's ETC state while there are any
@@ -2831,7 +2818,7 @@ cd_etc(com, etc)
* for the tx to become empty so that the command is sure to be
* executed soon after we issue it.
*/
- savecrit = critical_enter();
+ critical_enter();
COM_LOCK();
if (com->etc == etc)
goto wait;
@@ -2842,7 +2829,7 @@ cd_etc(com, etc)
&& (com->etc == ETC_BREAK_ENDING || com->etc == ETC_BREAK_ENDED
|| com->etc == ETC_NONE))) {
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return;
}
com->etc = etc;
@@ -2851,7 +2838,7 @@ cd_etc(com, etc)
= (com->intr_enable & ~CD1400_SRER_TXRDY) | CD1400_SRER_TXMPTY);
wait:
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
while (com->etc == etc
&& tsleep(&com->etc, TTIPRI | PCATCH, "cyetc", 0) == 0)
continue;
@@ -2865,7 +2852,6 @@ cd_getreg(com, reg)
struct com_s *basecom;
u_char car;
int cy_align;
- critical_t savecrit;
register_t eflags;
cy_addr iobase;
int val;
@@ -2875,7 +2861,7 @@ cd_getreg(com, reg)
cy_align = com->cy_align;
iobase = com->iobase;
eflags = read_eflags();
- savecrit = critical_enter();
+ critical_enter();
if (eflags & PSL_I)
COM_LOCK();
if (basecom->car != car)
@@ -2883,7 +2869,7 @@ cd_getreg(com, reg)
val = cd_inb(iobase, reg, cy_align);
if (eflags & PSL_I)
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
return (val);
}
@@ -2896,7 +2882,6 @@ cd_setreg(com, reg, val)
struct com_s *basecom;
u_char car;
int cy_align;
- critical_t savecrit;
register_t eflags;
cy_addr iobase;
@@ -2905,7 +2890,7 @@ cd_setreg(com, reg, val)
cy_align = com->cy_align;
iobase = com->iobase;
eflags = read_eflags();
- savecrit = critical_enter();
+ critical_enter();
if (eflags & PSL_I)
COM_LOCK();
if (basecom->car != car)
@@ -2913,7 +2898,7 @@ cd_setreg(com, reg, val)
cd_outb(iobase, reg, cy_align, val);
if (eflags & PSL_I)
COM_UNLOCK();
- critical_exit(savecrit);
+ critical_exit();
}
#ifdef CyDebug
OpenPOWER on IntegriCloud