]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Move checks for SMM from command-line creation into validation phase
authorMartin Kletzander <mkletzan@redhat.com>
Thu, 10 May 2018 21:28:24 +0000 (23:28 +0200)
committerMartin Kletzander <mkletzan@redhat.com>
Fri, 8 Jun 2018 08:28:46 +0000 (10:28 +0200)
We are still hoping all of such checks will be moved there and this is one small
step in that direction.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_command.c
src/qemu/qemu_domain.c

index e7d4f00bb18e265f7666aae88cb0df61096619c5..55a830fd24127e5e9b2100f226e1b228270c942d 100644 (file)
@@ -4773,17 +4773,6 @@ virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps,
 }
 
 
-bool
-virQEMUCapsSupportsSMM(virQEMUCapsPtr qemuCaps,
-                       const virDomainDef *def)
-{
-    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_SMM_OPT))
-        return false;
-
-    return qemuDomainIsQ35(def);
-}
-
-
 bool
 virQEMUCapsIsMachineSupported(virQEMUCapsPtr qemuCaps,
                               const char *canonical_machine)
index aad8f398caed4ceb2d396a12f0f8963b00ab3347..7e602049ca7162ac6505e47b14d117eaaf6e4dc7 100644 (file)
@@ -505,9 +505,6 @@ bool virQEMUCapsHasPCIMultiBus(virQEMUCapsPtr qemuCaps,
 bool virQEMUCapsSupportsVmport(virQEMUCapsPtr qemuCaps,
                                const virDomainDef *def);
 
-bool virQEMUCapsSupportsSMM(virQEMUCapsPtr qemuCaps,
-                            const virDomainDef *def);
-
 char *virQEMUCapsFlagsString(virQEMUCapsPtr qemuCaps);
 
 const char *virQEMUCapsGetBinary(virQEMUCapsPtr qemuCaps);
index 5190a88ad3ffc5de19e647cb827ddb8306d647c2..6bc9bf5ffab8ef7ebfdd6ed92d8a96bab6c026b3 100644 (file)
@@ -7136,16 +7136,8 @@ qemuBuildMachineCommandLine(virCommandPtr cmd,
                           virTristateSwitchTypeToString(vmport));
     }
 
-    if (smm) {
-        if (!virQEMUCapsSupportsSMM(qemuCaps, def)) {
-            virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
-                           _("smm is not available with this QEMU binary"));
-            goto cleanup;
-        }
-
-        virBufferAsprintf(&buf, ",smm=%s",
-                          virTristateSwitchTypeToString(smm));
-    }
+    if (smm)
+        virBufferAsprintf(&buf, ",smm=%s", virTristateSwitchTypeToString(smm));
 
     if (def->mem.dump_core) {
         virBufferAsprintf(&buf, ",dump-guest-core=%s",
index 245d7d3852b567cf3429902ab4918ecb33282fe6..1805f2918669681566e9141131dfbedb08adf382 100644 (file)
@@ -3743,7 +3743,8 @@ qemuDomainDefGetVcpuHotplugGranularity(const virDomainDef *def)
 
 
 static int
-qemuDomainDefValidateFeatures(const virDomainDef *def)
+qemuDomainDefValidateFeatures(const virDomainDef *def,
+                              virQEMUCapsPtr qemuCaps)
 {
     size_t i;
 
@@ -3790,6 +3791,16 @@ qemuDomainDefValidateFeatures(const virDomainDef *def)
             }
             break;
 
+        case VIR_DOMAIN_FEATURE_SMM:
+            if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
+                (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_MACHINE_SMM_OPT) ||
+                 !qemuDomainIsQ35(def))) {
+                virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+                               _("smm is not available with this QEMU binary"));
+                return -1;
+            }
+            break;
+
         case VIR_DOMAIN_FEATURE_ACPI:
         case VIR_DOMAIN_FEATURE_APIC:
         case VIR_DOMAIN_FEATURE_PAE:
@@ -3802,7 +3813,6 @@ qemuDomainDefValidateFeatures(const virDomainDef *def)
         case VIR_DOMAIN_FEATURE_CAPABILITIES:
         case VIR_DOMAIN_FEATURE_PMU:
         case VIR_DOMAIN_FEATURE_VMPORT:
-        case VIR_DOMAIN_FEATURE_SMM:
         case VIR_DOMAIN_FEATURE_VMCOREINFO:
         case VIR_DOMAIN_FEATURE_LAST:
             break;
@@ -3925,7 +3935,7 @@ qemuDomainDefValidate(const virDomainDef *def,
         }
     }
 
-    if (qemuDomainDefValidateFeatures(def) < 0)
+    if (qemuDomainDefValidateFeatures(def, qemuCaps) < 0)
         goto cleanup;
 
     ret = 0;