MCLALLOC must be called at splimp
[unix-history] / usr / src / sys / kern / subr_log.c
index 67397bb..2f41cca 100644 (file)
@@ -1,4 +1,10 @@
-/*     subr_log.c      6.4     85/03/18        */
+/*
+ * Copyright (c) 1982, 1986 Regents of the University of California.
+ * All rights reserved.  The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ *
+ *     @(#)subr_log.c  7.1 (Berkeley) %G%
+ */
 
 /*
  * Error log buffer for kernel printf's.
 
 /*
  * Error log buffer for kernel printf's.
@@ -27,24 +33,11 @@ struct logsoftc {
 
 int    log_open;                       /* also used in log() */
 
 
 int    log_open;                       /* also used in log() */
 
-#ifdef LOGDEBUG
-/*VARARGS1*/
-xprintf(fmt, x1)
-       char *fmt;
-       unsigned x1;
-{
-
-       prf(fmt, &x1, 1, (struct tty *)0);
-}
-#endif
-
+/*ARGSUSED*/
 logopen(dev)
        dev_t dev;
 {
 
 logopen(dev)
        dev_t dev;
 {
 
-#ifdef LOGDEBUG
-       xprintf("logopen: dev=0x%x\n", dev);
-#endif
        if (log_open)
                return (EBUSY);
        log_open = 1;
        if (log_open)
                return (EBUSY);
        log_open = 1;
@@ -63,12 +56,10 @@ logopen(dev)
                for (i=0; i < MSG_BSIZE; i++)
                        msgbuf.msg_bufc[i] = 0;
        }
                for (i=0; i < MSG_BSIZE; i++)
                        msgbuf.msg_bufc[i] = 0;
        }
-#ifdef LOGDEBUG
-       xprintf("logopen: bufx=%d, bufr=%d\n", msgbuf.msg_bufx, msgbuf.msg_bufr);
-#endif
        return (0);
 }
 
        return (0);
 }
 
+/*ARGSUSED*/
 logclose(dev, flag)
        dev_t dev;
 {
 logclose(dev, flag)
        dev_t dev;
 {
@@ -76,25 +67,17 @@ logclose(dev, flag)
        logsoftc.sc_state = 0;
        logsoftc.sc_selp = 0;
        logsoftc.sc_pgrp = 0;
        logsoftc.sc_state = 0;
        logsoftc.sc_selp = 0;
        logsoftc.sc_pgrp = 0;
-#ifdef LOGDEBUG
-       xprintf("logclose: dev=0x%x\n", dev);
-#endif
 }
 
 }
 
+/*ARGSUSED*/
 logread(dev, uio)
        dev_t dev;
        struct uio *uio;
 {
        register long l;
 logread(dev, uio)
        dev_t dev;
        struct uio *uio;
 {
        register long l;
-       register u_int c;
-       register struct iovec *iov;
        register int s;
        int error = 0;
 
        register int s;
        int error = 0;
 
-#ifdef LOGDEBUG
-       xprintf("logread: dev=0x%x\n", dev);
-#endif
-
        s = splhigh();
        while (msgbuf.msg_bufr == msgbuf.msg_bufx) {
                if (logsoftc.sc_state & LOG_NBIO) {
        s = splhigh();
        while (msgbuf.msg_bufr == msgbuf.msg_bufx) {
                if (logsoftc.sc_state & LOG_NBIO) {
@@ -111,24 +94,21 @@ logread(dev, uio)
                l = msgbuf.msg_bufx - msgbuf.msg_bufr;
                if (l < 0)
                        l = MSG_BSIZE - msgbuf.msg_bufr;
                l = msgbuf.msg_bufx - msgbuf.msg_bufr;
                if (l < 0)
                        l = MSG_BSIZE - msgbuf.msg_bufr;
-               c = min((u_int) l, (u_int)uio->uio_resid);
-#ifdef LOGDEBUG
-               xprintf("logread: bufx=%d, bufr=%d, l=%d, c=%d\n",
-                       msgbuf.msg_bufx, msgbuf.msg_bufr, l, c);
-#endif
-               if (c <= 0)
+               l = MIN(l, uio->uio_resid);
+               if (l == 0)
                        break;
                error = uiomove((caddr_t)&msgbuf.msg_bufc[msgbuf.msg_bufr],
                        break;
                error = uiomove((caddr_t)&msgbuf.msg_bufc[msgbuf.msg_bufr],
-                       (int)c, UIO_READ, uio);
+                       (int)l, UIO_READ, uio);
                if (error)
                        break;
                if (error)
                        break;
-               msgbuf.msg_bufr += c;
+               msgbuf.msg_bufr += l;
                if (msgbuf.msg_bufr < 0 || msgbuf.msg_bufr >= MSG_BSIZE)
                        msgbuf.msg_bufr = 0;
        }
        return (error);
 }
 
                if (msgbuf.msg_bufr < 0 || msgbuf.msg_bufr >= MSG_BSIZE)
                        msgbuf.msg_bufr = 0;
        }
        return (error);
 }
 
+/*ARGSUSED*/
 logselect(dev, rw)
        dev_t dev;
        int rw;
 logselect(dev, rw)
        dev_t dev;
        int rw;
@@ -138,26 +118,15 @@ logselect(dev, rw)
        switch (rw) {
 
        case FREAD:
        switch (rw) {
 
        case FREAD:
-               if (msgbuf.msg_bufr != msgbuf.msg_bufx)
-                       goto win;
-#ifdef LOGDEBUG
-               if (logsoftc.sc_selp)
-                       xprintf("logselect: collision\n");
-#endif
+               if (msgbuf.msg_bufr != msgbuf.msg_bufx) {
+                       splx(s);
+                       return (1);
+               }
                logsoftc.sc_selp = u.u_procp;
                break;
                logsoftc.sc_selp = u.u_procp;
                break;
-
-       case FWRITE:
-#ifdef LOGDEBUG
-               xprintf("logselect: FWRITE\n");
-#endif
-               break;
        }
        splx(s);
        return (0);
        }
        splx(s);
        return (0);
-win:
-       splx(s);
-       return (1);
 }
 
 logwakeup()
 }
 
 logwakeup()