diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0ae28a0a7c..9a21ac10ce 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -141,6 +141,7 @@ VIR_ENUM_IMPL(virDomainHyperVMode, VIR_DOMAIN_HYPERV_MODE_LAST, "none", "custom", + "passthrough", ); VIR_ENUM_IMPL(virDomainBoot, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index bfbe5a2f6b..afabcd1b4d 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -158,6 +158,7 @@ VIR_ENUM_DECL(virDomainOS); typedef enum { VIR_DOMAIN_HYPERV_MODE_NONE = 0, VIR_DOMAIN_HYPERV_MODE_CUSTOM, + VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH, VIR_DOMAIN_HYPERV_MODE_LAST } virDomainHyperVMode; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index ec6bb83bda..6d00105b24 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6713,6 +6713,22 @@ qemuBuildCpuCommandLine(virCommand *cmd, } if (def->features[VIR_DOMAIN_FEATURE_HYPERV] != VIR_DOMAIN_HYPERV_MODE_NONE) { + switch ((virDomainHyperVMode) def->features[VIR_DOMAIN_FEATURE_HYPERV]) { + case VIR_DOMAIN_HYPERV_MODE_CUSTOM: + break; + + case VIR_DOMAIN_HYPERV_MODE_PASSTHROUGH: + virBufferAsprintf(&buf, ",hv-%s=on", "passthrough"); + break; + + case VIR_DOMAIN_HYPERV_MODE_NONE: + case VIR_DOMAIN_HYPERV_MODE_LAST: + default: + virReportEnumRangeError(virDomainHyperVMode, + def->features[VIR_DOMAIN_FEATURE_HYPERV]); + return -1; + } + for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { switch ((virDomainHyperv) i) { case VIR_DOMAIN_HYPERV_RELAXED: