]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Add a capability flag for -no-acpi
authorMichael Ellerman <michael@ellerman.id.au>
Tue, 20 Dec 2011 01:08:29 +0000 (12:08 +1100)
committerEric Blake <eblake@redhat.com>
Tue, 20 Dec 2011 19:33:55 +0000 (12:33 -0700)
Currently non-x86 guests must have <acpi/> defined in <features> to
prevent libvirt from running qemu with -no-acpi. Although it works, it
is a hack.

Instead add a capability flag which indicates whether qemu understands
the -no-acpi option. Use it to control whether libvirt emits -no-acpi.

Current versions of qemu always display -no-acpi in their help output,
so this patch has no effect. However the development version of qemu
has been modified such that -no-acpi is only displayed when it is
actually supported.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_command.c
tests/qemuhelptest.c
tests/qemuxml2argvtest.c
tests/qemuxmlnstest.c

index e69d60129a0672be2731d7320d3896f322136fee..de2bc13228c93022c558af37620875ccc5428047 100644 (file)
@@ -142,6 +142,7 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
               "cache-unsafe", /* 75 */
               "rombar",
               "ich9-ahci",
+              "no-acpi",
     );
 
 struct qemu_feature_flags {
@@ -1066,6 +1067,8 @@ qemuCapsComputeCmdFlags(const char *help,
         qemuCapsSet(flags, QEMU_CAPS_RTC_TD_HACK);
     if (strstr(help, "-no-hpet"))
         qemuCapsSet(flags, QEMU_CAPS_NO_HPET);
+    if (strstr(help, "-no-acpi"))
+        qemuCapsSet(flags, QEMU_CAPS_NO_ACPI);
     if (strstr(help, "-no-kvm-pit-reinjection"))
         qemuCapsSet(flags, QEMU_CAPS_NO_KVM_PIT);
     if (strstr(help, "-tdf"))
index 00e521434a11cba19ee84f0833051141035ef003..08d84576e62f3460f9a4aab3f2d54bc23faf1d39 100644 (file)
@@ -115,6 +115,7 @@ enum qemuCapsFlags {
     QEMU_CAPS_DRIVE_CACHE_UNSAFE = 75, /* Is cache=unsafe supported? */
     QEMU_CAPS_PCI_ROMBAR         = 76, /* -device rombar=0|1 */
     QEMU_CAPS_ICH9_AHCI         = 77, /* -device ich9-ahci */
+    QEMU_CAPS_NO_ACPI          = 78, /* -no-acpi */
 
     QEMU_CAPS_LAST,                   /* this must always be the last item */
 };
index d33d7c86da1f6d00dc8049b8df9ae831d7b1b993..54d1694681279d472b1385e7c61425e297808eaa 100644 (file)
@@ -3941,8 +3941,10 @@ qemuBuildCommandLine(virConnectPtr conn,
     if (monitor_json && qemuCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN))
         virCommandAddArg(cmd, "-no-shutdown");
 
-    if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))
-        virCommandAddArg(cmd, "-no-acpi");
+    if (qemuCapsGet(qemuCaps, QEMU_CAPS_NO_ACPI)) {
+        if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))
+            virCommandAddArg(cmd, "-no-acpi");
+    }
 
     if (!def->os.bootloader) {
         /*
index 4258fc9e71602ba6db2bc199ea357c574de891e3..f31c9037ffc5b9a8d20bf1ce274d5e75e6037ed1 100644 (file)
@@ -81,11 +81,12 @@ static int testHelpStrParsing(const void *data)
         goto cleanup;
 
     if (STRNEQ(got, expected)) {
-        fprintf(stderr,
-                "%s: computed flags do not match: got %s, expected %s\n",
-                info->name, got, expected);
+        if (virTestGetVerbose() || virTestGetDebug())
+            fprintf(stderr,
+                    "%s: computed flags do not match: got %s, expected %s\n",
+                    info->name, got, expected);
 
-        if (getenv("VIR_TEST_DEBUG"))
+        if (virTestGetDebug())
             printMismatchedFlags(flags, info->flags);
 
         goto cleanup;
@@ -145,7 +146,8 @@ mymain(void)
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
             QEMU_CAPS_DRIVE,
-            QEMU_CAPS_NAME);
+            QEMU_CAPS_NAME,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("kvm-74", 9001, 1, 74,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -158,7 +160,8 @@ mymain(void)
             QEMU_CAPS_DRIVE_FORMAT,
             QEMU_CAPS_MEM_PATH,
             QEMU_CAPS_TDF,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("kvm-83-rhel56", 9001, 1, 83,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -185,7 +188,8 @@ mymain(void)
             QEMU_CAPS_DRIVE_READONLY,
             QEMU_CAPS_SMBIOS_TYPE,
             QEMU_CAPS_SPICE,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-0.10.5", 10005, 0, 0,
             QEMU_CAPS_KQEMU,
             QEMU_CAPS_VNC_COLON,
@@ -205,7 +209,8 @@ mymain(void)
             QEMU_CAPS_RTC_TD_HACK,
             QEMU_CAPS_NO_HPET,
             QEMU_CAPS_VGA_NONE,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.10.5", 10005, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -231,7 +236,8 @@ mymain(void)
             QEMU_CAPS_TDF,
             QEMU_CAPS_NESTING,
             QEMU_CAPS_VGA_NONE,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("kvm-86", 10050, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -257,7 +263,8 @@ mymain(void)
             QEMU_CAPS_NESTING,
             QEMU_CAPS_SMBIOS_TYPE,
             QEMU_CAPS_VGA_NONE,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.11.0-rc2", 10092, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -288,7 +295,8 @@ mymain(void)
             QEMU_CAPS_NAME_PROCESS,
             QEMU_CAPS_SMBIOS_TYPE,
             QEMU_CAPS_VGA_NONE,
-            QEMU_CAPS_NO_SHUTDOWN);
+            QEMU_CAPS_NO_SHUTDOWN,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-0.12.1", 12001, 0, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -320,7 +328,8 @@ mymain(void)
             QEMU_CAPS_MIGRATE_QEMU_FD,
             QEMU_CAPS_DRIVE_AIO,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -366,7 +375,8 @@ mymain(void)
             QEMU_CAPS_PIIX4_USB_UHCI,
             QEMU_CAPS_USB_HUB,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -405,7 +415,8 @@ mymain(void)
             QEMU_CAPS_MIGRATE_QEMU_FD,
             QEMU_CAPS_DRIVE_AIO,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -460,7 +471,8 @@ mymain(void)
             QEMU_CAPS_PCI_OHCI,
             QEMU_CAPS_USB_HUB,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -511,7 +523,8 @@ mymain(void)
             QEMU_CAPS_PIIX4_USB_UHCI,
             QEMU_CAPS_USB_HUB,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-kvm-0.12.1.2-rhel62-beta", 12001, 1, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -570,7 +583,8 @@ mymain(void)
             QEMU_CAPS_ICH9_USB_EHCI1,
             QEMU_CAPS_USB_HUB,
             QEMU_CAPS_NO_SHUTDOWN,
-            QEMU_CAPS_PCI_ROMBAR);
+            QEMU_CAPS_PCI_ROMBAR,
+            QEMU_CAPS_NO_ACPI);
     DO_TEST("qemu-1.0", 1000000, 0, 0,
             QEMU_CAPS_VNC_COLON,
             QEMU_CAPS_NO_REBOOT,
@@ -632,7 +646,8 @@ mymain(void)
             QEMU_CAPS_USB_HUB,
             QEMU_CAPS_NO_SHUTDOWN,
             QEMU_CAPS_PCI_ROMBAR,
-            QEMU_CAPS_ICH9_AHCI);
+            QEMU_CAPS_ICH9_AHCI,
+            QEMU_CAPS_NO_ACPI);
 
     return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
 }
index 228d052de32044eefef27411290fefdd0c3e9a0e..e1221eb96266f8c1f904ff5eb9c2a48bc9b34795 100644 (file)
@@ -145,6 +145,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
     qemuCapsSetList(extraFlags,
                     QEMU_CAPS_VNC_COLON,
                     QEMU_CAPS_NO_REBOOT,
+                    QEMU_CAPS_NO_ACPI,
                     QEMU_CAPS_LAST);
 
     if (qemudCanonicalizeMachine(&driver, vmdef) < 0)
index 86cf9740c9cf6caae30d30e68189fa39990218d2..0432cc42f581a4c4446e7c76c2f4a4976263a68a 100644 (file)
@@ -89,6 +89,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
     qemuCapsSetList(extraFlags,
                     QEMU_CAPS_VNC_COLON,
                     QEMU_CAPS_NO_REBOOT,
+                    QEMU_CAPS_NO_ACPI,
                     QEMU_CAPS_LAST);
 
     if (qemudCanonicalizeMachine(&driver, vmdef) < 0)