From af21737121c0679ff273c5b2e602a090e88a1aa4 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 15 Mar 1996 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1996-03-15 --- carrera/clock.c | 3 --- pc/devata.c | 12 ++++++------ pc/devfloppy.c | 2 +- pc/devvga.c | 2 +- pc/kbd.c | 2 +- port/devaudio.c | 2 +- port/devcons.c | 9 +++++++++ port/devsd.c | 4 ++-- port/portfns.h | 2 +- port/proc.c | 30 +++++++++++++++--------------- 10 files changed, 37 insertions(+), 31 deletions(-) diff --git a/carrera/clock.c b/carrera/clock.c index 193463ebb8debcbe9e272d37fe744f155f9f1ab2..5909f64defd47308c434bc8f73a7a066e076baa2 100644 --- a/carrera/clock.c +++ b/carrera/clock.c @@ -47,9 +47,6 @@ clockinit(void) void clock(Ureg *ur) { - int l; - Segment *s; - wrcompare(rdcount()+(m->speed*1000000)/HZ); m->ticks++; diff --git a/pc/devata.c b/pc/devata.c index 0fe0a31bf9d0a7b64f4685cd94cf94d74f0965f3..f7d45f8b73cf8003267a9fecef091703e7f2b34e 100644 --- a/pc/devata.c +++ b/pc/devata.c @@ -1344,12 +1344,12 @@ atareplinit(Drive *dp) /* * parse replacement table. */ - n = getfields((char*)buf, line, Nrepl+1, "\n"); + n = parsefields((char*)buf, line, Nrepl+1, "\n"); if(strncmp(line[0], REPLMAGIC, sizeof(REPLMAGIC)-1)){ dp->repl.p = 0; } else { for(dp->repl.nrepl = 0, i = 1; i < n; i++, dp->repl.nrepl++){ - if(getfields(line[i], field, 1, " ") != 1) + if(parsefields(line[i], field, 1, " ") != 1) break; dp->repl.blk[dp->repl.nrepl] = strtoul(field[0], 0, 0); if(dp->repl.blk[dp->repl.nrepl] <= 0) @@ -1424,13 +1424,13 @@ atapart(Drive *dp) i = 0; ataxfer(dp, &dp->p[0], Cread, (dp->p[0].end-2)*dp->bytes, dp->bytes, buf); buf[dp->bytes-1] = 0; - n = getfields((char*)buf, line, Npart+1, "\n"); + n = parsefields((char*)buf, line, Npart+1, "\n"); if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0) i = 1; else{ ataxfer(dp, &dp->p[1], Cread, 0, dp->bytes, buf); buf[dp->bytes-1] = 0; - n = getfields((char*)buf, line, Npart+1, "\n"); + n = parsefields((char*)buf, line, Npart+1, "\n"); if(n == 0 || strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1)) i = 1; } @@ -1442,7 +1442,7 @@ atapart(Drive *dp) } else{ strcpy((char*)buf, p); - n = getfields((char*)buf, line, Npart+1, "\n"); + n = parsefields((char*)buf, line, Npart+1, "\n"); } /* @@ -1450,7 +1450,7 @@ atapart(Drive *dp) */ if(n > 0 && strncmp(line[0], PARTMAGIC, sizeof(PARTMAGIC)-1) == 0){ for(i = 1; i < n; i++){ - if(getfields(line[i], field, 3, " ") != 3) + if(parsefields(line[i], field, 3, " ") != 3) break; if(pp >= &dp->p[Npart]) break; diff --git a/pc/devfloppy.c b/pc/devfloppy.c index faf7fb692185d2c819472a6241fbb3b28da4dad9..78b16c70fb4d2e579845ab32e68d5d4889c6163f 100644 --- a/pc/devfloppy.c +++ b/pc/devfloppy.c @@ -1048,7 +1048,7 @@ floppyformat(Drive *dp, char *params) /* * set the type */ - if(getfields(params, f, 3, " ") > 1){ + if(parsefields(params, f, 3, " ") > 1){ for(t = floppytype; t < &floppytype[NTYPES]; t++){ if(strcmp(f[1], t->name)==0 && t->dt==dp->dt){ dp->t = t; diff --git a/pc/devvga.c b/pc/devvga.c index 8878420c7e9a42a9a86c696ac48b685ff8a63afe..5aa22e3df4dcec560e70feb16f0b5ab993bede50 100644 --- a/pc/devvga.c +++ b/pc/devvga.c @@ -242,7 +242,7 @@ vgactl(char *arg) Hwgc *hwgcp; Vgac *vgacp; - n = getfields(arg, field, 4, " "); + n = parsefields(arg, field, 4, " "); if(n < 2) error(Ebadarg); diff --git a/pc/kbd.c b/pc/kbd.c index 405b6b706d8cba7412370e54d7b9a89807ed229c..2d95fc1647607c5aa5caafeaf3d069d1653cfb74 100644 --- a/pc/kbd.c +++ b/pc/kbd.c @@ -551,7 +551,7 @@ mousectl(char *arg) int n, x; char *field[3]; - n = getfields(arg, field, 3, " "); + n = parsefields(arg, field, 3, " "); if(strncmp(field[0], "serial", 6) == 0){ switch(n){ case 1: diff --git a/port/devaudio.c b/port/devaudio.c index 49ff1053123ebd5cc9fe73f601247a20fad88965..eb60ddcce27b29bbc49882d2194051d57ef0a79d 100644 --- a/port/devaudio.c +++ b/port/devaudio.c @@ -822,7 +822,7 @@ audiowrite(Chan *c, char *a, long n, ulong) memmove(buf, a, n); buf[n] = '\0'; - nf = getfields(buf, field, Ncmd, " \t\n"); + nf = parsefields(buf, field, Ncmd, " \t\n"); for(i = 0; i < nf; i++){ /* * a number is volume diff --git a/port/devcons.c b/port/devcons.c index 79bc69201c8ee40878bd356821baced8c051e9c2..ccdc878e7122d0bf51c90737805a1d499ef3f9c3 100644 --- a/port/devcons.c +++ b/port/devcons.c @@ -361,6 +361,7 @@ enum{ Qpid, Qppid, Qrandom, + Qreboot, Qswap, Qsysname, Qsysstat, @@ -388,6 +389,7 @@ Dirtab consdir[]={ "pid", {Qpid}, NUMSIZE, 0444, "ppid", {Qppid}, NUMSIZE, 0444, "random", {Qrandom}, 0, 0664, + "reboot", {Qreboot}, 0, 0664, "swap", {Qswap}, 0, 0664, "sysname", {Qsysname}, 0, 0664, "sysstat", {Qsysstat}, 0, 0666, @@ -828,6 +830,13 @@ conswrite(Chan *c, void *va, long n, ulong offset) conslights(a, n); break; + case Qreboot: + if(!iseve()) + error(Eperm); + if(strncmp(a, "reboot", 6) == 0) + exit(0); + break; + case Qsysstat: for(id = 0; id < 32; id++) { if(active.machs & (1< 0 && strncmp(line[0], MAGIC, sizeof(MAGIC)-1) == 0) { for(i = 1; i < n; i++) { - switch(getfields(line[i], field, 3, " ")) { + switch(parsefields(line[i], field, 3, " ")) { case 2: if(strcmp(field[0], "unit") == 0) strncpy(d->vol, field[1], NAMELEN); diff --git a/port/portfns.h b/port/portfns.h index 7eae7faeb59889840c02e64a935b3c672da55540..ba54139ca5fcd2109368fba77e1cc8e32e2ed737 100644 --- a/port/portfns.h +++ b/port/portfns.h @@ -91,7 +91,6 @@ void freepte(Segment*, Pte*); void freesegs(int); void freesession(Session*); void getcolor(ulong, ulong*, ulong*, ulong*); -int getfields(char*, char**, int, char*); void gotolabel(Label*); void graphicsactive(int); void graphicscmap(int); @@ -167,6 +166,7 @@ int openmode(ulong); Block* padblock(Block*, int); void pageinit(void); void panic(char*, ...); +int parsefields(char*, char**, int, char*); void pexit(char*, int); void pgrpcpy(Pgrp*, Pgrp*); void pgrpnote(ulong, char*, long, int); diff --git a/port/proc.c b/port/proc.c index c345f717fd918e43abeabeed53a5ca49d4304677..47e1b64eded0042628805a2518e40ac140fba92c 100644 --- a/port/proc.c +++ b/port/proc.c @@ -187,23 +187,23 @@ loop: spllo(); for(;;){ /* - * Once a second we look for a long waiting process - * in the lowest priority queue to make sure nothing - * gets starved out by a malfunctioning high priority - * process. + * get lowest priority process that this + * processor can run given affinity constraints + * and that hasn't run in a while */ - if((m->ticks % HZ) == 0){ + if((m->ticks & 3) == 0){ for(rq = runq; rq < &runq[Nrq]; rq++){ p = rq->head; - if(p == 0 || p->mp != MACHP(m->machno)) + if(p == 0) continue; - - i = m->ticks - p->readytime; - if(i < HZ) - break; - - p->art = 0; - goto found; + for(; p; p = p->rnext){ + if(p->mp != MACHP(m->machno)) + if(p->movetime >= m->ticks) + continue; + i = m->ticks - p->readytime; + if(i >= 2*nrdy*p->art) + goto found; + } } } @@ -216,13 +216,13 @@ loop: if(p == 0) continue; for(; p; p = p->rnext){ - if(p->mp == MACHP(m->machno) || p->movetime < m->ticks) + if(p->mp == MACHP(m->machno) + || p->movetime < m->ticks) goto found; } } } - found: splhi(); lock(runq);