]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: don't fail capabilities check on 0.12.x
authorEric Blake <eblake@redhat.com>
Tue, 18 Jan 2011 16:47:30 +0000 (09:47 -0700)
committerEric Blake <eblake@redhat.com>
Tue, 18 Jan 2011 21:45:53 +0000 (14:45 -0700)
Fixes regression introduced in commit 2211518, where all qemu 0.12.x
fails to start, as does qemu 0.13.x lacking the pci-assign device.
Prior to 2211518, the code was just ignoring a non-zero exit status
from the qemu child, but the virCommand code checked this to avoid
masking any other issues, which means the real bug of provoking
non-zero exit status has been latent for a longer time.

* src/qemu/qemu_capabilities.c (qemuCapsExtractVersionInfo): Check
for -device driver,? support.
(qemuCapsExtractDeviceStr): Avoid failure if all probed devices
are unsupported.
Reported by Ken Congyang.

src/qemu/qemu_capabilities.c

index 1f0a3c202770f42935202e96d80ba841c16655fd..faf7d441f37f6d12079c2ac4b9e0eb88ad8f4011 100644 (file)
@@ -1048,10 +1048,14 @@ qemuCapsExtractDeviceStr(const char *qemu,
 
     /* Cram together all device-related queries into one invocation;
      * the output format makes it possible to distinguish what we
-     * need.  Unrecognized '-device bogus,?' cause an error in
-     * isolation, but are silently ignored in combination with
-     * '-device ?'.  */
+     * need.  With qemu 0.13.0 and later, unrecognized '-device
+     * bogus,?' cause an error in isolation, but are silently ignored
+     * in combination with '-device ?'.  Qemu 0.12.x doesn't
+     * understand '-device name,?', and always exits with status 1 for
+     * the simpler '-device ?', so this function is really only useful
+     * for parsing out features added in 0.13.0 or later.  */
     cmd = virCommandNewArgList(qemu,
+                               "-device", "?",
                                "-device", "pci-assign,?",
                                "-device", "virtio-blk-pci,?",
                                NULL);
@@ -1119,7 +1123,10 @@ int qemuCapsExtractVersionInfo(const char *qemu,
                              &version, &is_kvm, &kvm_version) == -1)
         goto cleanup;
 
+    /* Only call qemuCapsExtractDeviceStr for qemu 0.13.0+, since it
+     * won't set any additional flags for qemu 0.12.x.  */
     if ((flags & QEMUD_CMD_FLAG_DEVICE) &&
+        strstr(help, "-device driver,?") &&
         qemuCapsExtractDeviceStr(qemu, &flags) < 0)
         goto cleanup;