Convert to critical sections. Stop messing with the interrupt masks.
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Wed, 15 Jun 2005 12:27:20 +0000 (12:27 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Wed, 15 Jun 2005 12:27:20 +0000 (12:27 +0000)
sys/net/ppp/if_ppp.c
sys/net/ppp_layer/ppp_tty.c

index 1575849..2979b2a 100644 (file)
@@ -70,7 +70,7 @@
  */
 
 /* $FreeBSD: src/sys/net/if_ppp.c,v 1.67.2.4 2002/04/14 21:41:48 luigi Exp $ */
-/* $DragonFly: src/sys/net/ppp/if_ppp.c,v 1.24 2005/02/11 22:25:57 joerg Exp $ */
+/* $DragonFly: src/sys/net/ppp/if_ppp.c,v 1.25 2005/06/15 12:27:19 joerg Exp $ */
 /* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */
 /* from NetBSD: if_ppp.c,v 1.15.2.2 1994/07/28 05:17:58 cgd Exp */
 
@@ -201,22 +201,22 @@ pppintr(struct netmsg *msg)
 {
     struct mbuf *m = ((struct netmsg_packet *)msg)->nm_packet;
     struct ppp_softc *sc;
-    int i, s;
+    int i;
 
     sc = ppp_softc;
     for (i = 0; i < NPPP; ++i, ++sc) {
-       s = splimp();
+       crit_enter();
        if (!(sc->sc_flags & SC_TBUSY)
            && (!ifq_is_empty(&sc->sc_if.if_snd) || !IF_QEMPTY(&sc->sc_fastq))) {
            sc->sc_flags |= SC_TBUSY;
-           splx(s);
+           crit_exit();
            (*sc->sc_start)(sc);
        } else
-           splx(s);
+           crit_exit();
        for (;;) {
-           s = splimp();
+           crit_enter();
            IF_DEQUEUE(&sc->sc_rawq, m);
-           splx(s);
+           crit_exit();
            if (m == NULL)
                break;
            ppp_inproc(sc, m);
@@ -372,7 +372,7 @@ int
 pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
     int flag, struct thread *td)
 {
-    int s, error, flags, mru, npx;
+    int error, flags, mru, npx;
     u_int nb;
     struct ppp_option_data *odp;
     struct compressor **cp;
@@ -404,14 +404,13 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
        if ((error = suser(td)) != 0)
            return (error);
        flags = *(int *)data & SC_MASK;
-       s = splsoftnet();
+       crit_enter();
 #ifdef PPP_COMPRESS
        if (sc->sc_flags & SC_CCP_OPEN && !(flags & SC_CCP_OPEN))
            ppp_ccp_closed(sc);
 #endif
-       splimp();
        sc->sc_flags = (sc->sc_flags & ~SC_MASK) | flags;
-       splx(s);
+       crit_exit();
        break;
 
     case PPPIOCSMRU:
@@ -431,9 +430,9 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
        if ((error = suser(td)) != 0)
            return (error);
        if (sc->sc_comp) {
-           s = splsoftnet();
+           crit_enter();
            sl_compress_init(sc->sc_comp, *(int *)data);
-           splx(s);
+           crit_exit();
        }
        break;
 #endif
@@ -464,7 +463,7 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
                 */
                error = 0;
                if (odp->transmit) {
-                   s = splsoftnet();
+                   crit_enter();
                    if (sc->sc_xc_state != NULL)
                        (*sc->sc_xcomp->comp_free)(sc->sc_xc_state);
                    sc->sc_xcomp = *cp;
@@ -475,11 +474,10 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
                               sc->sc_if.if_xname);
                        error = ENOBUFS;
                    }
-                   splimp();
                    sc->sc_flags &= ~SC_COMP_RUN;
-                   splx(s);
+                   crit_exit();
                } else {
-                   s = splsoftnet();
+                   crit_enter();
                    if (sc->sc_rc_state != NULL)
                        (*sc->sc_rcomp->decomp_free)(sc->sc_rc_state);
                    sc->sc_rcomp = *cp;
@@ -490,9 +488,8 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
                               sc->sc_if.if_xname);
                        error = ENOBUFS;
                    }
-                   splimp();
                    sc->sc_flags &= ~SC_DECOMP_RUN;
-                   splx(s);
+                   crit_exit();
                }
                return (error);
            }
@@ -519,23 +516,23 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
            if ((error = suser(td)) != 0)
                return (error);
            if (npi->mode != sc->sc_npmode[npx]) {
-               s = splsoftnet();
+               crit_enter();
                sc->sc_npmode[npx] = npi->mode;
                if (npi->mode != NPMODE_QUEUE) {
                    ppp_requeue(sc);
                    (*sc->sc_start)(sc);
                }
-               splx(s);
+               crit_exit();
            }
        }
        break;
 
     case PPPIOCGIDLE:
-       s = splsoftnet();
+       crit_enter();
        t = time_second;
        ((struct ppp_idle *)data)->xmit_idle = t - sc->sc_last_sent;
        ((struct ppp_idle *)data)->recv_idle = t - sc->sc_last_recv;
-       splx(s);
+       crit_exit();
        break;
 
 #ifdef PPP_FILTER
@@ -563,10 +560,10 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data,
            newcode = 0;
        bp = (cmd == PPPIOCSPASS)? &sc->sc_pass_filt: &sc->sc_active_filt;
        oldcode = bp->bf_insns;
-       s = splimp();
+       crit_enter();
        bp->bf_len = nbp->bf_len;
        bp->bf_insns = newcode;
-       splx(s);
+       crit_exit();
        if (oldcode != 0)
            free(oldcode, M_DEVBUF);
        break;
@@ -596,7 +593,9 @@ pppsioctl(ifp, cmd, data, cr)
 #ifdef PPP_COMPRESS
     struct ppp_comp_stats *pcp;
 #endif
-    int s = splimp(), error = 0;
+    int error = 0;
+
+    crit_enter();
 
     switch (cmd) {
     case SIOCSIFFLAGS:
@@ -702,7 +701,7 @@ pppsioctl(ifp, cmd, data, cr)
     default:
        error = ENOTTY;
     }
-    splx(s);
+    crit_exit();
     return (error);
 }
 
@@ -722,7 +721,7 @@ pppoutput(ifp, m0, dst, rtp)
     struct ppp_softc *sc = &ppp_softc[ifp->if_dunit];
     int protocol, address, control;
     u_char *cp;
-    int s, error;
+    int error;
     struct ip *ip;
     struct ifqueue *ifq;
     enum NPmode mode;
@@ -861,7 +860,7 @@ pppoutput(ifp, m0, dst, rtp)
     /*
      * Put the packet on the appropriate queue.
      */
-    s = splsoftnet();  /* redundant */
+    crit_enter();
     if (mode == NPMODE_QUEUE) {
        /* XXX we should limit the number of packets on this queue */
        *sc->sc_npqtail = m0;
@@ -883,7 +882,7 @@ pppoutput(ifp, m0, dst, rtp)
            error = ifq_enqueue(&sc->sc_if.if_snd, m0, &pktattr);
        }
        if (error) {
-           splx(s);
+           crit_exit();
            sc->sc_if.if_oerrors++;
            sc->sc_stats.ppp_oerrors++;
            return (error);
@@ -894,7 +893,7 @@ pppoutput(ifp, m0, dst, rtp)
     ifp->if_opackets++;
     ifp->if_obytes += len;
 
-    splx(s);
+    crit_exit();
     return (0);
 
 bad:
@@ -972,11 +971,10 @@ void
 ppp_restart(sc)
     struct ppp_softc *sc;
 {
-    int s = splimp();
-
+    crit_enter();
     sc->sc_flags &= ~SC_TBUSY;
     schednetisr(NETISR_PPP);
-    splx(s);
+    crit_exit();
 }
 
 
@@ -1124,7 +1122,7 @@ ppp_ccp(sc, m, rcvd)
 {
     u_char *dp, *ep;
     struct mbuf *mp;
-    int slen, s;
+    int slen;
 
     /*
      * Get a pointer to the data after the PPP header.
@@ -1156,9 +1154,9 @@ ppp_ccp(sc, m, rcvd)
     case CCP_TERMACK:
        /* CCP must be going down - disable compression */
        if (sc->sc_flags & SC_CCP_UP) {
-           s = splimp();
+           crit_enter();
            sc->sc_flags &= ~(SC_CCP_UP | SC_COMP_RUN | SC_DECOMP_RUN);
-           splx(s);
+           crit_exit();
        }
        break;
 
@@ -1172,9 +1170,9 @@ ppp_ccp(sc, m, rcvd)
                    && (*sc->sc_xcomp->comp_init)
                        (sc->sc_xc_state, dp + CCP_HDRLEN, slen - CCP_HDRLEN,
                         sc->sc_if.if_dunit, 0, sc->sc_flags & SC_DEBUG)) {
-                   s = splimp();
+                   crit_enter();
                    sc->sc_flags |= SC_COMP_RUN;
-                   splx(s);
+                   crit_exit();
                }
            } else {
                /* peer is agreeing to send compressed packets. */
@@ -1183,10 +1181,10 @@ ppp_ccp(sc, m, rcvd)
                        (sc->sc_rc_state, dp + CCP_HDRLEN, slen - CCP_HDRLEN,
                         sc->sc_if.if_dunit, 0, sc->sc_mru,
                         sc->sc_flags & SC_DEBUG)) {
-                   s = splimp();
+                   crit_enter();
                    sc->sc_flags |= SC_DECOMP_RUN;
                    sc->sc_flags &= ~(SC_DC_ERROR | SC_DC_FERROR);
-                   splx(s);
+                   crit_exit();
                }
            }
        }
@@ -1200,9 +1198,9 @@ ppp_ccp(sc, m, rcvd)
            } else {
                if (sc->sc_rc_state && (sc->sc_flags & SC_DECOMP_RUN)) {
                    (*sc->sc_rcomp->decomp_reset)(sc->sc_rc_state);
-                   s = splimp();
+                   crit_enter();
                    sc->sc_flags &= ~SC_DC_ERROR;
-                   splx(s);
+                   crit_exit();
                }
            }
        }
@@ -1240,13 +1238,14 @@ ppppktin(sc, m, lost)
     struct mbuf *m;
     int lost;
 {
-    int s = splimp();
+    crit_enter();
 
     if (lost)
        m->m_flags |= M_ERRMARK;
     IF_ENQUEUE(&sc->sc_rawq, m);
     schednetisr(NETISR_PPP);
-    splx(s);
+
+    crit_exit();
 }
 
 /*
@@ -1263,7 +1262,7 @@ ppp_inproc(sc, m)
 {
     struct ifnet *ifp = &sc->sc_if;
     int isr;
-    int s, ilen = 0, xlen, proto, rv;
+    int ilen = 0, xlen, proto, rv;
     u_char *cp, adrs, ctrl;
     struct mbuf *mp, *dmp = NULL;
     u_char *iphdr;
@@ -1286,9 +1285,9 @@ ppp_inproc(sc, m)
 
     if (m->m_flags & M_ERRMARK) {
        m->m_flags &= ~M_ERRMARK;
-       s = splimp();
+       crit_enter();
        sc->sc_flags |= SC_VJ_RESET;
-       splx(s);
+       crit_exit();
     }
 
 #ifdef PPP_COMPRESS
@@ -1318,13 +1317,13 @@ ppp_inproc(sc, m)
             */
            if (sc->sc_flags & SC_DEBUG)
                printf("%s: decompress failed %d\n", ifp->if_xname, rv);
-           s = splimp();
+           crit_enter();
            sc->sc_flags |= SC_VJ_RESET;
            if (rv == DECOMP_ERROR)
                sc->sc_flags |= SC_DC_ERROR;
            else
                sc->sc_flags |= SC_DC_FERROR;
-           splx(s);
+           crit_exit();
        }
 
     } else {
@@ -1349,9 +1348,9 @@ ppp_inproc(sc, m)
         */
        if (sc->sc_comp)
            sl_uncompress_tcp(NULL, 0, TYPE_ERROR, sc->sc_comp);
-       s = splimp();
+       crit_enter();
        sc->sc_flags &= ~SC_VJ_RESET;
-       splx(s);
+       crit_exit();
     }
 
     /*
index b329933..2a390b3 100644 (file)
@@ -71,7 +71,7 @@
  */
 
 /* $FreeBSD: src/sys/net/ppp_tty.c,v 1.43.2.1 2002/02/13 00:43:11 dillon Exp $ */
-/* $DragonFly: src/sys/net/ppp_layer/ppp_tty.c,v 1.12 2005/02/11 22:25:57 joerg Exp $ */
+/* $DragonFly: src/sys/net/ppp_layer/ppp_tty.c,v 1.13 2005/06/15 12:27:20 joerg Exp $ */
 
 #include "opt_ppp.h"           /* XXX for ppp_defs.h */
 
@@ -84,6 +84,7 @@
 #include <sys/dkstat.h>
 #include <sys/socket.h>
 #include <sys/fcntl.h>
+#include <sys/thread2.h>
 #include <sys/tty.h>
 #include <sys/conf.h>
 #include <sys/uio.h>
@@ -164,27 +165,6 @@ void
 pppasyncattach(dummy)
     void *dummy;
 {
-#ifdef __i386__
-    int s;
-
-    s = splhigh();
-
-    /*
-     * Make sure that the soft net "engine" cannot run while spltty code is
-     * active.  The if_ppp.c code can walk down into b_to_q etc, and it is
-     * bad if the tty system was in the middle of another b_to_q...
-     */
-    tty_imask |= softnet_imask;        /* spltty() block spl[soft]net() */
-    net_imask |= softtty_imask;        /* splimp() block splsofttty() */
-    net_imask |= tty_imask;    /* splimp() block spltty() */
-    update_intr_masks();
-
-    splx(s);
-    if ( bootverbose )
-        printf("new masks: bio %x, tty %x, net %x\n",
-                bio_imask, tty_imask, net_imask);
-#endif
-
     /* register line discipline */
     linesw[PPPDISC] = pppdisc;
 }
@@ -200,23 +180,23 @@ pppopen(dev_t dev, struct tty *tp)
 {
     struct thread *td = curthread;     /* XXX */
     struct ppp_softc *sc;
-    int error, s;
+    int error;
 
     if ((error = suser(td)) != 0)
        return (error);
 
-    s = spltty();
+    crit_enter();
 
     if (tp->t_line == PPPDISC) {
        sc = (struct ppp_softc *) tp->t_sc;
        if (sc != NULL && sc->sc_devp == (void *) tp) {
-           splx(s);
+           crit_exit();
            return (0);
        }
     }
 
     if ((sc = pppalloc(td)) == NULL) {
-       splx(s);
+       crit_exit();
        return ENXIO;
     }
 
@@ -253,7 +233,7 @@ pppopen(dev_t dev, struct tty *tp)
                        sc->sc_if.if_mtu + PPP_HIWAT);
     clist_alloc_cblocks(&tp->t_rawq, 0, 0);
 
-    splx(s);
+    crit_exit();
 
     return (0);
 }
@@ -270,9 +250,8 @@ pppclose(tp, flag)
     int flag;
 {
     struct ppp_softc *sc;
-    int s;
 
-    s = spltty();
+    crit_enter();
     ttyflush(tp, FREAD | FWRITE);
     clist_free_cblocks(&tp->t_canq);
     clist_free_cblocks(&tp->t_outq);
@@ -285,7 +264,7 @@ pppclose(tp, flag)
            pppdealloc(sc);
        }
     }
-    splx(s);
+    crit_exit();
     return 0;
 }
 
@@ -296,9 +275,8 @@ static void
 pppasyncrelinq(sc)
     struct ppp_softc *sc;
 {
-    int s;
+    crit_enter();
 
-    s = spltty();
     if (sc->sc_outm) {
        m_freem(sc->sc_outm);
        sc->sc_outm = NULL;
@@ -311,7 +289,8 @@ pppasyncrelinq(sc)
        callout_stop(&sc->sc_timeout);
        sc->sc_flags &= ~SC_TIMEOUT;
     }
-    splx(s);
+
+    crit_exit();
 }
 
 /*
@@ -322,13 +301,12 @@ pppasyncsetmtu(sc)
 struct ppp_softc *sc;
 {
     struct tty *tp = (struct tty *) sc->sc_devp;
-    int s;
 
-    s = spltty();
+    crit_enter();
     if (tp != NULL)
        clist_alloc_cblocks(&tp->t_outq, sc->sc_if.if_mtu + PPP_HIWAT,
                             sc->sc_if.if_mtu + PPP_HIWAT);
-    splx(s);
+    crit_exit();
 }
 
 /*
@@ -344,7 +322,6 @@ pppread(tp, uio, flag)
 {
     struct ppp_softc *sc = (struct ppp_softc *)tp->t_sc;
     struct mbuf *m, *m0;
-    int s;
     int error = 0;
 
     if (sc == NULL)
@@ -353,25 +330,25 @@ pppread(tp, uio, flag)
      * Loop waiting for input, checking that nothing disasterous
      * happens in the meantime.
      */
-    s = spltty();
+    crit_exit();
     for (;;) {
        if (tp != (struct tty *) sc->sc_devp || tp->t_line != PPPDISC) {
-           splx(s);
+           crit_exit();
            return 0;
        }
        if (sc->sc_inq.ifq_head != NULL)
            break;
        if ((tp->t_state & TS_CONNECTED) == 0) {
-           splx(s);
+           crit_exit();
            return 0;           /* end of file */
        }
        if (tp->t_state & TS_ASYNC || flag & IO_NDELAY) {
-           splx(s);
+           crit_exit();
            return (EWOULDBLOCK);
        }
        error = ttysleep(tp, TSA_HUP_OR_INPUT(tp), PCATCH, "pppin", 0);
        if (error) {
-           splx(s);
+           crit_exit();
            return error;
        }
     }
@@ -381,7 +358,7 @@ pppread(tp, uio, flag)
 
     /* Get the packet from the input queue */
     IF_DEQUEUE(&sc->sc_inq, m0);
-    splx(s);
+    crit_exit();
 
     for (m = m0; m && uio->uio_resid; m = m->m_next)
        if ((error = uiomove(mtod(m, u_char *), m->m_len, uio)) != 0)
@@ -404,7 +381,7 @@ pppwrite(tp, uio, flag)
     struct ppp_softc *sc = (struct ppp_softc *)tp->t_sc;
     struct mbuf *m, *m0, **mp;
     struct sockaddr dst;
-    int len, error, s;
+    int len, error;
 
     if ((tp->t_state & TS_CONNECTED) == 0)
        return 0;               /* wrote 0 bytes */
@@ -416,12 +393,12 @@ pppwrite(tp, uio, flag)
        uio->uio_resid < PPP_HDRLEN)
        return (EMSGSIZE);
 
-    s = spltty();
+    crit_enter();
     for (mp = &m0; uio->uio_resid; mp = &m->m_next) {
        MGET(m, MB_WAIT, MT_DATA);
        if ((*mp = m) == NULL) {
            m_freem(m0);
-           splx(s);
+           crit_exit();
            return (ENOBUFS);
        }
        m->m_len = 0;
@@ -432,7 +409,7 @@ pppwrite(tp, uio, flag)
            len = uio->uio_resid;
        if ((error = uiomove(mtod(m, u_char *), len, uio)) != 0) {
            m_freem(m0);
-           splx(s);
+           crit_exit();
            return (error);
        }
        m->m_len = len;
@@ -444,7 +421,7 @@ pppwrite(tp, uio, flag)
 
     /* call the upper layer to "transmit" it... */
     error = pppoutput(&sc->sc_if, m0, &dst, (struct rtentry *)0);
-    splx(s);
+    crit_exit();
     return (error);
 }
 
@@ -458,7 +435,7 @@ static int
 ppptioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *td)
 {
     struct ppp_softc *sc = (struct ppp_softc *) tp->t_sc;
-    int error, s;
+    int error;
 
     if (sc == NULL || tp != (struct tty *) sc->sc_devp)
        return (ENOIOCTL);
@@ -488,12 +465,12 @@ ppptioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, struct thread *td)
     case PPPIOCSXASYNCMAP:
        if ((error = suser(td)) != 0)
            break;
-       s = spltty();
+       crit_enter();
        bcopy(data, sc->sc_asyncmap, sizeof(sc->sc_asyncmap));
        sc->sc_asyncmap[1] = 0;             /* mustn't escape 0x20 - 0x3f */
        sc->sc_asyncmap[2] &= ~0x40000000;  /* mustn't escape 0x5e */
        sc->sc_asyncmap[3] |= 0x60000000;   /* must escape 0x7d, 0x7e */
-       splx(s);
+       crit_exit();
        break;
 
     case PPPIOCGXASYNCMAP:
@@ -571,7 +548,6 @@ pppasyncstart(sc)
     int len;
     u_char *start, *stop, *cp;
     int n, ndone, done, idle;
-    int s;
 
     idle = 0;
     /* XXX assumes atomic access to *tp although we're not at spltty(). */
@@ -636,17 +612,17 @@ pppasyncstart(sc)
                 * Put it out in a different form.
                 */
                if (len) {
-                   s = spltty();
+                   crit_enter();
                    if (putc(PPP_ESCAPE, &tp->t_outq)) {
-                       splx(s);
+                       crit_exit();
                        break;
                    }
                    if (putc(*start ^ PPP_TRANS, &tp->t_outq)) {
                        (void) unputc(&tp->t_outq);
-                       splx(s);
+                       crit_exit();
                        break;
                    }
-                   splx(s);
+                   crit_exit();
                    sc->sc_stats.ppp_obytes += 2;
                    start++;
                    len--;
@@ -687,7 +663,7 @@ pppasyncstart(sc)
                 * Try to output the FCS and flag.  If the bytes
                 * don't all fit, back out.
                 */
-               s = spltty();
+               crit_enter();
                for (q = endseq; q < p; ++q)
                    if (putc(*q, &tp->t_outq)) {
                        done = 0;
@@ -695,7 +671,7 @@ pppasyncstart(sc)
                            unputc(&tp->t_outq);
                        break;
                    }
-               splx(s);
+               crit_exit();
                if (done)
                    sc->sc_stats.ppp_obytes += q - endseq;
            }
@@ -727,7 +703,7 @@ pppasyncstart(sc)
     }
 
     /* Call pppstart to start output again if necessary. */
-    s = spltty();
+    crit_enter();
     pppstart(tp);
 
     /*
@@ -740,7 +716,7 @@ pppasyncstart(sc)
        sc->sc_flags |= SC_TIMEOUT;
     }
 
-    splx(s);
+    crit_exit();
 }
 
 /*
@@ -752,14 +728,13 @@ pppasyncctlp(sc)
     struct ppp_softc *sc;
 {
     struct tty *tp;
-    int s;
 
     /* Put a placeholder byte in canq for ttselect()/ttnread(). */
-    s = spltty();
+    crit_enter();
     tp = (struct tty *) sc->sc_devp;
     putc(0, &tp->t_canq);
     ttwakeup(tp);
-    splx(s);
+    crit_exit();
 }
 
 /*
@@ -812,12 +787,11 @@ ppp_timeout(x)
 {
     struct ppp_softc *sc = (struct ppp_softc *) x;
     struct tty *tp = (struct tty *) sc->sc_devp;
-    int s;
 
-    s = spltty();
+    crit_enter();
     sc->sc_flags &= ~SC_TIMEOUT;
     pppstart(tp);
-    splx(s);
+    crit_exit();
 }
 
 /*
@@ -864,7 +838,7 @@ pppinput(c, tp)
 {
     struct ppp_softc *sc;
     struct mbuf *m;
-    int ilen, s;
+    int ilen;
 
     sc = (struct ppp_softc *) tp->t_sc;
     if (sc == NULL || tp != (struct tty *) sc->sc_devp)
@@ -908,7 +882,7 @@ pppinput(c, tp)
        }
     }
 
-    s = spltty();
+    crit_enter();
     if (c & 0x80)
        sc->sc_flags |= SC_RCV_B7_1;
     else
@@ -917,7 +891,7 @@ pppinput(c, tp)
        sc->sc_flags |= SC_RCV_ODDP;
     else
        sc->sc_flags |= SC_RCV_EVNP;
-    splx(s);
+    crit_exit();
 
     if (sc->sc_flags & SC_LOG_RAWIN)
        ppplogchar(sc, c);
@@ -935,7 +909,7 @@ pppinput(c, tp)
         */
        if (sc->sc_flags & (SC_FLUSH | SC_ESCAPED)
            || (ilen > 0 && sc->sc_fcs != PPP_GOODFCS)) {
-           s = spltty();
+           crit_enter();
            sc->sc_flags |= SC_PKTLOST; /* note the dropped packet */
            if ((sc->sc_flags & (SC_FLUSH | SC_ESCAPED)) == 0){
                if (sc->sc_flags & SC_DEBUG)
@@ -945,7 +919,7 @@ pppinput(c, tp)
                sc->sc_stats.ppp_ierrors++;
            } else
                sc->sc_flags &= ~(SC_FLUSH | SC_ESCAPED);
-           splx(s);
+           crit_exit();
            return 0;
        }
 
@@ -953,11 +927,11 @@ pppinput(c, tp)
            if (ilen) {
                if (sc->sc_flags & SC_DEBUG)
                    printf("%s: too short (%d)\n", sc->sc_if.if_xname, ilen);
-               s = spltty();
+               crit_enter();
                sc->sc_if.if_ierrors++;
                sc->sc_stats.ppp_ierrors++;
                sc->sc_flags |= SC_PKTLOST;
-               splx(s);
+               crit_exit();
            }
            return 0;
        }
@@ -980,9 +954,9 @@ pppinput(c, tp)
 
        ppppktin(sc, m, sc->sc_flags & SC_PKTLOST);
        if (sc->sc_flags & SC_PKTLOST) {
-           s = spltty();
+           crit_enter();
            sc->sc_flags &= ~SC_PKTLOST;
-           splx(s);
+           crit_exit();
        }
 
        pppgetm(sc);
@@ -998,16 +972,16 @@ pppinput(c, tp)
     if (c < 0x20 && (sc->sc_rasyncmap & (1 << c)))
        return 0;
 
-    s = spltty();
+    crit_enter();
     if (sc->sc_flags & SC_ESCAPED) {
        sc->sc_flags &= ~SC_ESCAPED;
        c ^= PPP_TRANS;
     } else if (c == PPP_ESCAPE) {
        sc->sc_flags |= SC_ESCAPED;
-       splx(s);
+        crit_exit();
        return 0;
     }
-    splx(s);
+    crit_exit();
 
     /*
      * Initialize buffer on first octet received.
@@ -1097,11 +1071,11 @@ pppinput(c, tp)
 
  flush:
     if (!(sc->sc_flags & SC_FLUSH)) {
-       s = spltty();
+       crit_enter();
        sc->sc_if.if_ierrors++;
        sc->sc_stats.ppp_ierrors++;
        sc->sc_flags |= SC_FLUSH;
-       splx(s);
+       crit_exit();
        if (sc->sc_flags & SC_LOG_FLUSH)
            ppplogchar(sc, c);
     }