]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Don't return unusable virttype in domain capabilities
authorJiri Denemark <jdenemar@redhat.com>
Fri, 25 Nov 2016 19:03:12 +0000 (20:03 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Fri, 25 Nov 2016 19:34:26 +0000 (20:34 +0100)
If a user asked for a KVM domain capabilities when KVM is not available,
we would happily return data we got when probing through TCG and
pretended they were relevant for KVM. Let's just report KVM is not
supported to avoid confusion.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
src/qemu/qemu_driver.c

index 26ebf763f012353f9f47b2f64a2dcd5e018489f3..6a26549237236c629586a37e250625542b2b2e07 100644 (file)
@@ -18719,6 +18719,7 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
     virQEMUDriverPtr driver = conn->privateData;
     virQEMUCapsPtr qemuCaps = NULL;
     int virttype = VIR_DOMAIN_VIRT_NONE;
+    virDomainVirtType capsType;
     virDomainCapsPtr domCaps = NULL;
     int arch = virArchFromHost(); /* virArch */
     virQEMUDriverConfigPtr cfg = NULL;
@@ -18797,11 +18798,19 @@ qemuConnectGetDomainCapabilities(virConnectPtr conn,
         machine = virQEMUCapsGetDefaultMachine(qemuCaps);
     }
 
-    if (virttype == VIR_DOMAIN_VIRT_NONE) {
-        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
-            virttype = VIR_DOMAIN_VIRT_KVM;
-        else
-            virttype = VIR_DOMAIN_VIRT_QEMU;
+    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
+        capsType = VIR_DOMAIN_VIRT_KVM;
+    else
+        capsType = VIR_DOMAIN_VIRT_QEMU;
+
+    if (virttype == VIR_DOMAIN_VIRT_NONE)
+        virttype = capsType;
+
+    if (virttype == VIR_DOMAIN_VIRT_KVM && capsType == VIR_DOMAIN_VIRT_QEMU) {
+        virReportError(VIR_ERR_INVALID_ARG,
+                       _("KVM is not supported by '%s' on this host"),
+                       emulatorbin);
+        goto cleanup;
     }
 
     if (!(domCaps = virDomainCapsNew(emulatorbin, machine, arch, virttype)))