M carrera/clock.c => carrera/clock.c +0 -3
@@ 47,9 47,6 @@ clockinit(void)
void
clock(Ureg *ur)
{
- int l;
- Segment *s;
-
wrcompare(rdcount()+(m->speed*1000000)/HZ);
m->ticks++;
M pc/devata.c => pc/devata.c +6 -6
@@ 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;
M pc/devfloppy.c => pc/devfloppy.c +1 -1
@@ 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;
M pc/devvga.c => pc/devvga.c +1 -1
@@ 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);
M pc/kbd.c => pc/kbd.c +1 -1
@@ 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:
M port/devaudio.c => port/devaudio.c +1 -1
@@ 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
M port/devcons.c => port/devcons.c +9 -0
@@ 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<<id)) {
M port/devsd.c => port/devsd.c +2 -2
@@ 328,10 328,10 @@ sdrdpart(Disk *d)
/*
* parse partition table.
*/
- n = getfields(b, line, Npart+2, "\n");
+ n = parsefields(b, line, Npart+2, "\n");
if(n > 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);
M port/portfns.h => port/portfns.h +1 -1
@@ 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);
M port/proc.c => port/proc.c +15 -15
@@ 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);