From: Nathaniel Wesley Filardo Date: Sat, 7 Nov 2015 05:35:25 +0000 (-0500) Subject: Add prepanic() function to prepare for panic X-Git-Url: https://hydra-www.ietfng.org/gitweb/?a=commitdiff_plain;h=b498e55857ac548e3d9099fd6d5c2ca7ed77e97d;p=xv6-public Add prepanic() function to prepare for panic --- diff --git a/console.c b/console.c index c2319be..5d70b49 100644 --- a/console.c +++ b/console.c @@ -102,14 +102,20 @@ cprintf(char *fmt, ...) release(&cons.lock); } +void +prepanic(void) +{ + cli(); + cons.locking = 0; +} + void panic(char *s) { int i; uint pcs[10]; - - cli(); - cons.locking = 0; + + prepanic(); cprintf("cpu%d: panic: ", cpu->id); cprintf(s); cprintf("\n"); diff --git a/defs.h b/defs.h index e43788e..1db4fcc 100644 --- a/defs.h +++ b/defs.h @@ -25,6 +25,7 @@ void cmostime(struct rtcdate *r); void consoleinit(void); void cprintf(char*, ...); void consoleintr(int(*)(void)); +void prepanic(void); void panic(char*) __attribute__((noreturn)); // debug.c diff --git a/trap.c b/trap.c index 043c9e4..ae36a2e 100644 --- a/trap.c +++ b/trap.c @@ -87,6 +87,7 @@ trap(struct trapframe *tf) //PAGEBREAK: 13 default: if(proc == 0 || (tf->cs&3) == 0){ + prepanic(); // In kernel, it must be our mistake. cprintf("unexpected trap %d from cpu %d eip %x (cr2=0x%x)\n", tf->trapno, cpu->id, tf->eip, rcr2());