--- /sys/src/9k/k10/trap.c +++ /sys/src/9k/k10/trap.c @@ -61,7 +61,7 @@ intrenable(int irq, void (*f)(Ureg*, void*), void* a, int tbdf, char *name) } if(vctl[vno]){ iunlock(&vctllock); - panic("vno %d for %s already allocated by %s\n", + panic("vno %d for %s already allocated by %s", vno, v->name, vctl[vno]->name); } v->vno = vno; @@ -140,7 +140,7 @@ trapenable(int vno, void (*f)(Ureg*, void*), void* a, char *name) Vctl *v; if(vno < 0 || vno >= 256) - panic("trapenable: vno %d\n", vno); + panic("trapenable: vno %d", vno); v = malloc(sizeof(Vctl)); v->tbdf = BUSUNKNOWN; v->f = f; @@ -241,7 +241,7 @@ intrtime(Mach*, int vno) if(up == nil && m->perf.inidle > diff) m->perf.inidle -= diff; - diff /= m->cpumhz*100; // quantum = 100µsec + diff /= m->cpumhz*100; /* quantum = 100µsec */ if(diff >= Ntimevec) diff = Ntimevec-1; intrtimes[vno][diff]++; @@ -318,19 +318,20 @@ trap(Ureg* ureg) preempted(); } } - else if(vno <= nelem(excname) && user){ + else if(vno < nelem(excname) && user){ spllo(); snprint(buf, sizeof buf, "sys: trap: %s", excname[vno]); postnote(up, 1, buf, NDebug); } else{ if(vno == IdtNMI){ + /* + * Don't re-enable, it confuses the crash dumps. nmienable(); - if(m->machno != 0){ - iprint("nmi: cpu%d: PC %#llux\n", - m->machno, ureg->ip); - for(;;); - } + */ + iprint("cpu%d: NMI PC %#llux\n", m->machno, ureg->ip); + while(m->machno != 0) + ; } dumpregs(ureg); #ifdef notdef @@ -340,7 +341,7 @@ trap(Ureg* ureg) } if(vno < nelem(excname)) panic("%s", excname[vno]); - panic("unknown trap/intr: %d\n", vno); + panic("unknown trap/intr: %d", vno); #else iprint("vno %d: buggeration @ %#p...\n", vno, ureg->ip); /* We get this one and didn't track it down yet */ @@ -446,10 +457,11 @@ dumpstackwithureg(Ureg* ureg) uintptr l, v, i, estack; extern ulong etext; int x; + char *s; if(ureg != nil) dumpregs(ureg); - if(getconf("*nodumpstack")){ + if((s = getconf("*nodumpstack")) != nil && strcmp(s, "0") != 0){ iprint("dumpstack disabled\n"); return; } @@ -504,7 +505,7 @@ debugbpt(Ureg* ureg, void*) panic("kernel bpt"); /* restore pc to instruction that caused the trap */ ureg->ip--; - sprint(buf, "sys: breakpoint"); + snprint(buf, sizeof buf, "sys: breakpoint"); postnote(up, 1, buf, NDebug); } @@ -538,7 +539,7 @@ faultamd64(Ureg* ureg, void*) * initialisation before the system is fully up. */ if(up == nil){ - panic("fault with up == nil; pc %#llux addr %#llux\n", + panic("fault with up == nil; pc %#llux addr %#llux", ureg->ip, addr); } read = !(ureg->error & 2); @@ -559,7 +560,7 @@ faultamd64(Ureg* ureg, void*) */ if(!user && (!insyscall || up->nerrlab == 0)){ dumpregs(ureg); - panic("fault: %#llux\n", addr); + panic("fault: %#llux", addr); } snprint(buf, sizeof buf, "sys: trap: fault %s addr=%#llux", read? "read": "write", addr);