From 6e83fafe331dd0b4fb19aa384c3dd36b3af62933 Mon Sep 17 00:00:00 2001 From: Tim Wiederhake Date: Thu, 25 Nov 2021 19:57:49 +0100 Subject: [PATCH] virDomainFeaturesHyperVDefParse: Read attribute "mode" of element "hyperv" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Ján Tomko --- src/conf/domain_conf.c | 11 +++++++++-- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_validate.c | 2 +- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 32ea6d2c68..1a5afbfa41 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -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: diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 8199a11b74..ec6bb83bda 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -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: diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 5592c99f3b..f9a195e991 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -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 "