[libvirt] [PATCH] qemu: fix QEMU_CAPS_NO_ACPI detection

Ján Tomko jtomko at redhat.com
Fri Dec 21 13:38:10 UTC 2012


In commit c4bbaaf8, caps->arch was checked uninitialized, rendering the
whole check useless.

This patch moves the conditional setting of QEMU_CAPS_NO_ACPI to
qemuCapsInitQMP, and removes the no longer needed exception for S390.

It also clears the flag for all non-x86 archs instead of just S390 in
qemuCapsInitHelp.
---
 src/qemu/qemu_capabilities.c |   29 ++++++++---------------------
 1 files changed, 8 insertions(+), 21 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 167cdb2..e0d0c2a 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2175,13 +2175,11 @@ qemuCapsInitHelp(qemuCapsPtr caps, uid_t runUid, gid_t runGid)
     if (caps->arch == VIR_ARCH_X86_64 ||
         caps->arch == VIR_ARCH_I686) {
         qemuCapsSet(caps, QEMU_CAPS_PCI_MULTIBUS);
-    }
-
-    /* S390 and probably other archs do not support no-acpi -
-       maybe the qemu option parsing should be re-thought. */
-    if (caps->arch == VIR_ARCH_S390 ||
-        caps->arch == VIR_ARCH_S390X)
+    } else {
+        /* -no-acpi is not supported on other archs
+         * even if qemu reports it in -help */
         qemuCapsClear(caps, QEMU_CAPS_NO_ACPI);
+    }
 
     /* qemuCapsExtractDeviceStr will only set additional caps if qemu
      * understands the 0.13.0+ notion of "-device driver,".  */
@@ -2260,13 +2258,6 @@ qemuCapsInitQMPBasic(qemuCapsPtr caps)
     qemuCapsSet(caps, QEMU_CAPS_DRIVE_CACHE_DIRECTSYNC);
     qemuCapsSet(caps, QEMU_CAPS_NO_SHUTDOWN);
     qemuCapsSet(caps, QEMU_CAPS_DRIVE_CACHE_UNSAFE);
-
-    /* ACPI is only supported on x86, PPC or
-     * other platforms don't support it*/
-    if (caps->arch == VIR_ARCH_I686 ||
-        caps->arch == VIR_ARCH_X86_64)
-        qemuCapsSet(caps, QEMU_CAPS_NO_ACPI);
-
     qemuCapsSet(caps, QEMU_CAPS_FSDEV_READONLY);
     qemuCapsSet(caps, QEMU_CAPS_VIRTIO_BLK_SG_IO);
     qemuCapsSet(caps, QEMU_CAPS_DRIVE_COPY_ON_READ);
@@ -2402,16 +2393,12 @@ qemuCapsInitQMP(qemuCapsPtr caps,
     }
     VIR_FREE(archstr);
 
-    /* Currently only x86_64 and i686 support PCI-multibus. */
+    /* Currently only x86_64 and i686 support PCI-multibus and -no-acpi. */
     if (caps->arch == VIR_ARCH_X86_64 ||
-        caps->arch == VIR_ARCH_I686)
+        caps->arch == VIR_ARCH_I686) {
         qemuCapsSet(caps, QEMU_CAPS_PCI_MULTIBUS);
-
-    /* S390 and probably other archs do not support no-acpi -
-       maybe the qemu option parsing should be re-thought. */
-    if (caps->arch == VIR_ARCH_S390 ||
-        caps->arch == VIR_ARCH_S390X)
-        qemuCapsClear(caps, QEMU_CAPS_NO_ACPI);
+        qemuCapsSet(caps, QEMU_CAPS_NO_ACPI);
+    }
 
     if (qemuCapsProbeQMPCommands(caps, mon) < 0)
         goto cleanup;
-- 
1.7.8.6




More information about the libvir-list mailing list