]> Devi Nivas Git - cs3210-lab1.git/commitdiff
tell SETGATE to leave interrupts on for T_SYSCALL
authorrtm <rtm>
Tue, 25 Sep 2007 15:23:44 +0000 (15:23 +0000)
committerrtm <rtm>
Tue, 25 Sep 2007 15:23:44 +0000 (15:23 +0000)
panic if unknown fault with CPL=0 (i.e. in kernel)

trap.c

diff --git a/trap.c b/trap.c
index ed286edbff92131f3e93962e9c15569d5bac9a96..ea15029568084aed04dfaf269ff7ea49456ca06c 100644 (file)
--- a/trap.c
+++ b/trap.c
@@ -20,7 +20,7 @@ tvinit(void)
 
   for(i = 0; i < 256; i++)
     SETGATE(idt[i], 0, SEG_KCODE<<3, vectors[i], 0);
-  SETGATE(idt[T_SYSCALL], 0, SEG_KCODE<<3, vectors[T_SYSCALL], DPL_USER);
+  SETGATE(idt[T_SYSCALL], 1, SEG_KCODE<<3, vectors[T_SYSCALL], DPL_USER);
   
   initlock(&tickslock, "time");
 }
@@ -72,7 +72,7 @@ trap(struct trapframe *tf)
     break;
     
   default:
-    if(cp == 0){
+    if(cp == 0 || (tf->cs & 3) == 0){
       // Otherwise it's our mistake.
       cprintf("unexpected trap %d from cpu %d eip %x\n",
               tf->trapno, cpu(), tf->eip);