Poor man's KVM reboot.
authorBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Feb 2009 01:45:02 +0000 (17:45 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 23 Feb 2009 01:45:02 +0000 (17:45 -0800)
kern/init.c
kern/monitor.c
kern/trap.c

index 4299b36..ab3cfbc 100644 (file)
@@ -47,9 +47,9 @@ void kernel_init(multiboot_info_t *mboot_info)
 #else
        // Touch all you want.
        ENV_CREATE(user_softint);
-       ENV_CREATE(user_badsegment);
-       ENV_CREATE(user_divzero);
-       ENV_CREATE(user_hello);
+       //ENV_CREATE(user_badsegment);
+       //ENV_CREATE(user_divzero);
+       //ENV_CREATE(user_hello);
 #endif // TEST*
 
        // We only have one user environment for now, so just run it.
index 5716a2d..7d2a918 100644 (file)
@@ -119,7 +119,14 @@ int mon_reboot(int argc, char **argv, struct Trapframe *tf)
 {
        cprintf("[Irish Accent]: She's goin' down, Cap'n!\n");
        outb(0x92, 0x3);
-       cprintf("Should have rebooted.  Doesn't work yet in KVM...\n");
+       // KVM doesn't reboot yet, but this next bit will make it
+       // if you're in kernel mode and you can't do a push, when an interrupt
+       // comes in, the system just resets.  if esp = 0, there's no room left.
+       // somewhat curious about what happens in an SMP....
+       cprintf("[Irish Accent]: I'm givin' you all she's got!\n");
+       asm volatile ("movl $0, %esp; int $0");
+       // really, should never see this
+       cprintf("Sigh....\n");
        return 0;
 }
 
index b1707fa..a31f6cf 100644 (file)
@@ -80,7 +80,7 @@ idt_init(void)
 
        // turn on syscall handling.  
        // DPL 3 means this can be triggered by the int instruction
-       idt[48].gd_dpl = 3;
+       idt[T_SYSCALL].gd_dpl = 3;
 
        // Setup a TSS so that we get the right stack
        // when we trap to the kernel.