M port/devcons.c => port/devcons.c +1 -0
@@ 123,6 123,7 @@ panic(char *fmt, ...)
n = doprint(buf+strlen(buf), buf+sizeof(buf), fmt, (&fmt+1)) - buf;
buf[n] = '\n';
putstrn(buf, n+1);
+ prflush();
dumpstack();
exit(1);
}
M port/fault.c => port/fault.c +5 -5
@@ 150,6 150,11 @@ fixfault(Segment *s, ulong addr, int read, int doputmmu)
break;
}
+ if(s->flushme) {
+ for(i = 0; i < MAXMACH; i++)
+ (*pg)->cachectl[i] = PG_TXTFLUSH;
+ }
+
qunlock(&s->lk);
if(doputmmu)
@@ 191,11 196,6 @@ pio(Segment *s, ulong addr, ulong soff, Page **p)
new = newpage(0, 0, addr);
k = kmap(new);
kaddr = (char*)VA(k);
-
- if(s->flushme) {
- for(n = 0; n < MAXMACH; n++)
- new->cachectl[n] = PG_TXTFLUSH;
- }
if(loadrec == 0) { /* This is demand load */
c = s->image->c;
M port/proc.c => port/proc.c +2 -1
@@ 157,8 157,9 @@ loop:
/* p->mach==0 only when process state is saved */
if(p == 0 || p->mach){
unlock(&runhiq);
+ /* keep off the bus (tuned for everest) */
if(conf.nmach > 1)
- delay(7); /* keep off the bus (tuned for everest) */
+ delay(7);
goto loop;
}
if(p->rnext == 0)
M port/sysproc.c => port/sysproc.c +1 -1
@@ 136,7 136,7 @@ sysrfork(ulong *arg)
p->egrp = up->egrp;
incref(p->egrp);
}
-
+memset(p->ltlbpid, 255, sizeof(p->ltlbpid));
p->hang = up->hang;
p->procmode = up->procmode;