]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Adjust usage of qemu -no-reboot and -no-shutdown options
authorJohn Ferlan <jferlan@redhat.com>
Tue, 23 Apr 2013 13:02:07 +0000 (09:02 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Wed, 15 May 2013 10:19:32 +0000 (06:19 -0400)
During building of the qemu command line determine whether to add/use the
'-no-reboot' option only if each of the 'on' events want to to destroy
the domain; otherwise, use the '-no-shutdown' option.

Prior to this change both could be on the command line, which while allowed
could be construed as a conflict.

src/qemu/qemu_command.c

index 588316649e9004a4a2c7371f498997a250bdf540..58eab54a28d1be7cdcc962f762d82a02af2c7a37 100644 (file)
@@ -6422,6 +6422,7 @@ qemuBuildCommandLine(virConnectPtr conn,
     int last_good_net = -1;
     bool hasHwVirt = false;
     virCommandPtr cmd = NULL;
+    bool allowReboot = true;
     bool emitBootindex = false;
     int sdl = 0;
     int vnc = 0;
@@ -6808,16 +6809,24 @@ qemuBuildCommandLine(virConnectPtr conn,
         }
     }
 
-    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_REBOOT) &&
-        def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART)
-        virCommandAddArg(cmd, "-no-reboot");
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_REBOOT)) {
+        /* Only add -no-reboot option if each event destroys domain */
+        if (def->onReboot == VIR_DOMAIN_LIFECYCLE_DESTROY &&
+            def->onPoweroff == VIR_DOMAIN_LIFECYCLE_DESTROY &&
+            def->onCrash == VIR_DOMAIN_LIFECYCLE_DESTROY) {
+            allowReboot = false;
+            virCommandAddArg(cmd, "-no-reboot");
+        }
+    }
 
     /* If JSON monitor is enabled, we can receive an event
      * when QEMU stops. If we use no-shutdown, then we can
      * watch for this event and do a soft/warm reboot.
      */
-    if (monitor_json && virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN))
+    if (monitor_json && allowReboot &&
+        virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) {
         virCommandAddArg(cmd, "-no-shutdown");
+    }
 
     if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_ACPI)) {
         if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))