]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/9/port/devcons.c
kernel: avoid selecting the boot process in killbig()
[plan9front.git] / sys / src / 9 / port / devcons.c
index f254d85e78777064aaa05216d52a44c3441f8381..551e4b5b27fc182a191626ea08fd1dfbd16470b3 100644 (file)
@@ -5,7 +5,6 @@
 #include       "fns.h"
 #include       "../port/error.h"
 
-#include       <pool.h>
 #include       <authsrv.h>
 
 void   (*consdebug)(void) = nil;
@@ -64,16 +63,6 @@ prflush(void)
                        break;
 }
 
-/*
- * Log console output so it can be retrieved via /dev/kmesg.
- * This is good for catching boot-time messages after the fact.
- */
-struct {
-       Lock lk;
-       char buf[16384];
-       uint n;
-} kmesg;
-
 static void
 kmesgputs(char *str, int n)
 {
@@ -114,9 +103,7 @@ putstrn0(char *str, int n, int usewrite)
 {
        int m;
        char *t;
-
-       if(!islo())
-               usewrite = 0;
+       int (*wq)(Queue*, void*, int);
 
        /*
         *  how many different output devices do we need?
@@ -132,12 +119,10 @@ putstrn0(char *str, int n, int usewrite)
         *  if there's a serial line being used as a console,
         *  put the message there.
         */
-       if(kprintoq != nil && !qisclosed(kprintoq)){
-               if(usewrite)
-                       qwrite(kprintoq, str, n);
-               else
-                       qiwrite(kprintoq, str, n);
-       }else if(screenputs != nil)
+       wq = usewrite && islo() ? qwrite : qiwrite;
+       if(kprintoq != nil && !qisclosed(kprintoq))
+               (*wq)(kprintoq, str, n);
+       else if(screenputs != nil)
                screenputs(str, n);
 
        if(serialoq == nil){
@@ -149,20 +134,12 @@ putstrn0(char *str, int n, int usewrite)
                t = memchr(str, '\n', n);
                if(t != nil) {
                        m = t-str;
-                       if(usewrite){
-                               qwrite(serialoq, str, m);
-                               qwrite(serialoq, "\r\n", 2);
-                       } else {
-                               qiwrite(serialoq, str, m);
-                               qiwrite(serialoq, "\r\n", 2);
-                       }
+                       (*wq)(serialoq, str, m);
+                       (*wq)(serialoq, "\r\n", 2);
                        n -= m+1;
                        str = t+1;
                } else {
-                       if(usewrite)
-                               qwrite(serialoq, str, n);
-                       else
-                               qiwrite(serialoq, str, n);
+                       (*wq)(serialoq, str, n);
                        break;
                }
        }
@@ -336,7 +313,6 @@ enum{
        Qppid,
        Qrandom,
        Qreboot,
-       Qswap,
        Qsysname,
        Qsysstat,
        Qtime,
@@ -369,7 +345,6 @@ static Dirtab consdir[]={
        "ppid",         {Qppid},        NUMSIZE,        0444,
        "random",       {Qrandom},      0,              0444,
        "reboot",       {Qreboot},      0,              0664,
-       "swap",         {Qswap},        0,              0664,
        "sysname",      {Qsysname},     0,              0664,
        "sysstat",      {Qsysstat},     0,              0666,
        "time",         {Qtime},        NUMSIZE+3*VLNUMSIZE,    0664,
@@ -479,12 +454,10 @@ consread(Chan *c, void *buf, long n, vlong off)
        ulong l;
        Mach *mp;
        char *b, *bp;
-       char tmp[256];          /* must be >= 18*NUMSIZE (Qswap) */
+       char tmp[256];
        int i, k, id;
        vlong offset = off;
        extern char configfile[];
-       extern Image fscache;
-       extern Image swapimage;
 
        if(n <= 0)
                return n;
@@ -604,33 +577,6 @@ consread(Chan *c, void *buf, long n, vlong off)
                poperror();
                return n;
 
-       case Qswap:
-               snprint(tmp, sizeof tmp,
-                       "%llud memory\n"
-                       "%llud pagesize\n"
-                       "%lud kernel\n"
-                       "%lud/%lud user\n"
-                       "%lud/%lud swap\n"
-                       "%llud/%llud/%llud kernel malloc\n"
-                       "%llud/%llud/%llud kernel draw\n"
-                       "%llud/%llud/%llud kernel secret\n",
-                       (uvlong)conf.npage*BY2PG,
-                       (uvlong)BY2PG,
-                       conf.npage-conf.upages,
-                       palloc.user-palloc.freecount-fscache.pgref-swapimage.pgref, palloc.user,
-                       conf.nswap-swapalloc.free, conf.nswap,
-                       (uvlong)mainmem->curalloc,
-                       (uvlong)mainmem->cursize,
-                       (uvlong)mainmem->maxsize,
-                       (uvlong)imagmem->curalloc,
-                       (uvlong)imagmem->cursize,
-                       (uvlong)imagmem->maxsize,
-                       (uvlong)secrmem->curalloc,
-                       (uvlong)secrmem->cursize,
-                       (uvlong)secrmem->maxsize);
-
-               return readstr((ulong)offset, buf, n, tmp);
-
        case Qsysname:
                if(sysname == nil)
                        return 0;
@@ -681,8 +627,7 @@ conswrite(Chan *c, void *va, long n, vlong off)
        long l, bp;
        char *a;
        Mach *mp;
-       int id, fd;
-       Chan *swc;
+       int id;
        ulong offset;
        Cmdbuf *cb;
        Cmdtab *ct;
@@ -777,25 +722,6 @@ conswrite(Chan *c, void *va, long n, vlong off)
                }
                break;
 
-       case Qswap:
-               if(n >= sizeof buf)
-                       error(Egreg);
-               memmove(buf, va, n);    /* so we can NUL-terminate */
-               buf[n] = 0;
-               /* start a pager if not already started */
-               if(strncmp(buf, "start", 5) == 0){
-                       kickpager();
-                       break;
-               }
-               if(!iseve())
-                       error(Eperm);
-               if(buf[0]<'0' || '9'<buf[0])
-                       error(Ebadarg);
-               fd = strtoul(buf, 0, 0);
-               swc = fdtochan(fd, ORDWR, 1, 1);
-               setswapchan(swc);
-               break;
-
        case Qsysname:
                if(offset != 0)
                        error(Ebadarg);
@@ -987,7 +913,8 @@ writebintime(char *buf, int n)
        vlong delta;
        long period;
 
-       n--;
+       if(--n <= 0)
+               error(Ebadtimectl);
        p = (uchar*)buf + 1;
        switch(*buf){
        case 'n':
@@ -1012,7 +939,7 @@ writebintime(char *buf, int n)
                todsetfreq(fasthz);
                break;
        }
-       return n;
+       return n+1;
 }
 
 void
@@ -1020,11 +947,9 @@ cpushutdown(void)
 {
        int ms, once;
 
-       lock(&active);
        once = active.machs[m->machno];
        active.machs[m->machno] = 0;
        active.exiting = 1;
-       unlock(&active);
 
        if(once)
                iprint("cpu%d: exiting\n", m->machno);