Convert to critical sections.
authorJoerg Sonnenberger <joerg@dragonflybsd.org>
Thu, 16 Jun 2005 16:06:40 +0000 (16:06 +0000)
committerJoerg Sonnenberger <joerg@dragonflybsd.org>
Thu, 16 Jun 2005 16:06:40 +0000 (16:06 +0000)
sys/dev/misc/labpc/labpc.c
sys/dev/misc/spic/spic.c

index 193ada4..ec1238e 100644 (file)
@@ -39,7 +39,7 @@
  * dufault@hda.com
  *
  * $FreeBSD: src/sys/i386/isa/labpc.c,v 1.35 1999/09/25 18:24:08 phk Exp $
- * $DragonFly: src/sys/dev/misc/labpc/labpc.c,v 1.10 2005/04/19 18:05:02 swildner Exp $
+ * $DragonFly: src/sys/dev/misc/labpc/labpc.c,v 1.11 2005/06/16 16:03:40 joerg Exp $
  *
  */
 
@@ -55,6 +55,7 @@
 #define b_actf b_act.tqe_next
 #include <sys/dataacq.h>
 #include <sys/conf.h>
+#include <sys/thread2.h>
 
 #ifdef LOUTB
 #include <machine/clock.h>
@@ -355,10 +356,9 @@ ad_clear(struct ctlr *ctlr)
 static __inline void
 reset(struct ctlr *ctlr)
 {
-       int s = splhigh();
-
+       crit_enter();
        CR_CLR(ctlr, 3);        /* Turn off interrupts first */
-       splx(s);
+       crit_exit();
 
        CR_CLR(ctlr, 1);
        CR_CLR(ctlr, 2);
@@ -593,12 +593,12 @@ tmo_stop(void *p)
        struct ctlr *ctlr = (struct ctlr *)p;
        struct buf *bp;
 
-       int s = spltty();
+       crit_enter();
 
        if (ctlr == 0)
        {
                printf("labpc?: Null ctlr struct?\n");
-               splx(s);
+               crit_exit();
                return;
        }
 
@@ -610,7 +610,7 @@ tmo_stop(void *p)
 
        if (bp == 0) {
                printf(", Null bp.\n");
-               splx(s);
+               crit_exit();
                return;
        }
 
@@ -618,7 +618,7 @@ tmo_stop(void *p)
 
        done_and_start_next(ctlr, bp, ETIMEDOUT);
 
-       splx(s);
+       crit_exit();
 }
 
 static void ad_intr(struct ctlr *ctlr)
@@ -816,9 +816,7 @@ start(struct ctlr *ctlr)
 static void
 ad_strategy(struct buf *bp, struct ctlr *ctlr)
 {
-       int s;
-
-       s = spltty();
+       crit_enter();
        bp->b_actf = NULL;
 
        if (ctlr->start_queue.b_bcount)
@@ -833,7 +831,7 @@ ad_strategy(struct buf *bp, struct ctlr *ctlr)
                ctlr->last = bp;
                start(ctlr);
        }
-       splx(s);
+       crit_exit();
 }
 
 /* da_strategy: Send data to the D-A.  The CHAN field should be
index 0547feb..3e68772 100644 (file)
@@ -48,7 +48,7 @@
  * also provided sample code upon which this driver was based.
  *
  * $FreeBSD: src/sys/i386/isa/spic.c,v 1.4.2.1 2002/04/15 00:52:12 will Exp $
- * $DragonFly: src/sys/dev/misc/spic/spic.c,v 1.11 2004/09/19 01:56:29 dillon Exp $
+ * $DragonFly: src/sys/dev/misc/spic/spic.c,v 1.12 2005/06/16 16:06:40 joerg Exp $
  */
 
 #include <sys/param.h>
@@ -70,6 +70,7 @@
 #include <sys/sysctl.h>
 #include <sys/uio.h>
 #include <sys/proc.h>
+#include <sys/thread2.h>
 
 #include "spicreg.h"
 
@@ -487,7 +488,7 @@ static int
 spicread(dev_t dev, struct uio *uio, int flag)
 {
        struct spic_softc *sc;
-       int l, s, error;
+       int l, error;
        u_char buf[SCBUFLEN];
 
        sc = devclass_get_softc(spic_devclass, 0);
@@ -495,24 +496,24 @@ spicread(dev_t dev, struct uio *uio, int flag)
        if (uio->uio_resid <= 0) /* What kind of a read is this?! */
                return 0;
 
-       s = spltty();
+       crit_enter();
        while (!(sc->sc_count)) {
                sc->sc_sleeping=1;
                error = tsleep((caddr_t) sc, PCATCH, "jogrea", 0);
                sc->sc_sleeping=0;
                if (error) {
-                       splx(s);
+                       crit_exit();
                        return error;
                }
        }
-       splx(s);
+       crit_exit();
 
-       s = spltty();
+       crit_enter();
        l = min(uio->uio_resid, sc->sc_count);
        bcopy(sc->sc_buf, buf, l);
        sc->sc_count -= l;
        bcopy(sc->sc_buf + l, sc->sc_buf, l);
-       splx(s);
+       crit_exit();
        return uiomove(buf, l, uio);
 
 }
@@ -539,7 +540,7 @@ spicpoll(dev_t dev, int events, struct thread *td)
        KKASSERT(p);
 
        sc = devclass_get_softc(spic_devclass, 0);
-       s = spltty();
+       crit_enter();
        if (events & (POLLIN | POLLRDNORM)) {
                if (sc->sc_count)
                        revents |= events & (POLLIN | POLLRDNORM);
@@ -551,7 +552,7 @@ spicpoll(dev_t dev, int events, struct thread *td)
                                sc->sc_rsel.si_pid = p->p_pid;
                }
        }
-       splx(s);
+       crit_exit();
 
        return revents;
 }