Updates for new version of qemu
authorJohn Ousterhout <ouster@cs.stanford.edu>
Thu, 17 Dec 2015 19:38:47 +0000 (11:38 -0800)
committerJohn Ousterhout <ouster@cs.stanford.edu>
Thu, 17 Dec 2015 19:38:47 +0000 (11:38 -0800)
Use new isa-debug-exit device for shutdown, switch name to
qemu-system-i386.

src/devices/shutdown.c
src/utils/pintos

index 61c76f7b060d2746ae6fa1763feede4f895db200..da94c5294f339c1d81eb0950f83e53f9f703b1dc 100644 (file)
@@ -107,6 +107,13 @@ shutdown_power_off (void)
   for (p = s; *p != '\0'; p++)
     outb (0x8900, *p);
 
+  /* For newer versions of qemu, you must run with -device
+   * isa-debug-exit, which exits on any write to an IO port (by
+   * default 0x501).  Qemu's exit code is double the value plus one,
+   * so there is no way to exit cleanly.  We use 0x31 which should
+   * result in a qemu exit code of 0x63.  */
+  outb (0x501, 0x31);
+
   /* This will power off a VMware VM if "gui.exitOnCLIHLT = TRUE"
      is set in its configuration file.  (The "pintos" script does
      that automatically.)  */
index 909df8391c57251f290142d134f59787590c253a..eca4708516e41f3c715d2145e761ba775036ed6a 100755 (executable)
@@ -618,7 +618,9 @@ sub run_qemu {
       if $vga eq 'terminal';
     print "warning: qemu doesn't support jitter\n"
       if defined $jitter;
-    my (@cmd) = ('qemu');
+    my (@cmd) = ('qemu-system-i386');
+    push (@cmd, '-device', 'isa-debug-exit');
+
     push (@cmd, '-hda', $disks[0]) if defined $disks[0];
     push (@cmd, '-hdb', $disks[1]) if defined $disks[1];
     push (@cmd, '-hdc', $disks[2]) if defined $disks[2];
@@ -857,7 +859,11 @@ sub xsystem {
            exit 0;
        }
 
-       return $?;
+        # Kind of a gross hack, because qemu's isa-debug-exit device
+        # only allows odd-numbered exit values, so we can't exit
+        # cleanly with 0.  We use exit status 0x63 as an alternate
+        # "clean" exit status.
+       return ($? != 0x6300) && $?;
     }
 }