]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virDomainFeaturesHyperVDefParse: Read attribute "mode" of element "hyperv"
authorTim Wiederhake <twiederh@redhat.com>
Thu, 25 Nov 2021 18:57:49 +0000 (19:57 +0100)
committerTim Wiederhake <twiederh@redhat.com>
Tue, 14 Dec 2021 15:50:45 +0000 (16:50 +0100)
Currently, this attribute may either have a value of "custom", or be absent
(which defaults to "custom"), for backwards compatibility.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/conf/domain_conf.c
src/qemu/qemu_command.c
src/qemu/qemu_validate.c

index 32ea6d2c681d8c093f652973bdbd18ae8a8c7bf2..1a5afbfa41025a80382e850278412b8609cf367a 100644 (file)
@@ -17428,7 +17428,14 @@ static int
 virDomainFeaturesHyperVDefParse(virDomainDef *def,
                                 xmlNodePtr node)
 {
-    def->features[VIR_DOMAIN_FEATURE_HYPERV] = VIR_TRISTATE_SWITCH_ON;
+    virDomainHyperVMode mode;
+
+    if (virXMLPropEnumDefault(node, "mode", virDomainHyperVModeTypeFromString,
+                              VIR_XML_PROP_NONZERO, &mode,
+                              VIR_DOMAIN_HYPERV_MODE_CUSTOM) < 0)
+        return -1;
+
+    def->features[VIR_DOMAIN_FEATURE_HYPERV] = mode;
 
     node = xmlFirstElementChild(node);
     while (node != NULL) {
@@ -21726,7 +21733,7 @@ virDomainDefFeaturesCheckABIStability(virDomainDef *src,
     }
 
     /* hyperv */
-    if (src->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) {
+    if (src->features[VIR_DOMAIN_FEATURE_HYPERV] != VIR_DOMAIN_HYPERV_MODE_NONE) {
         for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
             switch ((virDomainHyperv) i) {
             case VIR_DOMAIN_HYPERV_RELAXED:
index 8199a11b74e1d57785181e383bb0bcd80029f8db..ec6bb83bda4f814f9f09b108bc51a5779b734f09 100644 (file)
@@ -6712,7 +6712,7 @@ qemuBuildCpuCommandLine(virCommand *cmd,
                           VIR_TRISTATE_SWITCH_ON ? "on" : "off");
     }
 
-    if (def->features[VIR_DOMAIN_FEATURE_HYPERV] == VIR_TRISTATE_SWITCH_ON) {
+    if (def->features[VIR_DOMAIN_FEATURE_HYPERV] != VIR_DOMAIN_HYPERV_MODE_NONE) {
         for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) {
             switch ((virDomainHyperv) i) {
             case VIR_DOMAIN_HYPERV_RELAXED:
index 5592c99f3bc25fc8226723e9e85597e72dad7a63..f9a195e99133d42a44c57dc772785738b8d1f52c 100644 (file)
@@ -273,7 +273,7 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
             break;
 
         case VIR_DOMAIN_FEATURE_HYPERV:
-            if (def->features[i] != VIR_TRISTATE_SWITCH_ABSENT &&
+            if (def->features[i] != VIR_DOMAIN_HYPERV_MODE_NONE &&
                 !ARCH_IS_X86(def->os.arch) && !qemuDomainIsARMVirt(def)) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                _("Hyperv features are not supported for "