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. * 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 | 13 ++++++++++--- 1 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1f0a3c2..faf7d44 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -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; -- 1.7.3.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list