The "max" model can be treated the same way as "host" model in general.
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
src/qemu/qemu_capabilities.c | 17 ++++++++++++++++-
src/qemu/qemu_command.c | 10 +++++++---
src/qemu/qemu_domain.c | 11 +++++++----
src/qemu/qemu_driver.c | 2 ++
src/qemu/qemu_process.c | 8 +++++---
src/qemu/qemu_validate.c | 13 +++++++++++--
tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.10.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.11.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml | 7 ++++++-
.../domaincapsdata/qemu_2.12.0-virt.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.12.0.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.12.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.12.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.9.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.9.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_2.9.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.0.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.0.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.1.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_3.1.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml | 7 ++++++-
.../domaincapsdata/qemu_4.0.0-virt.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0.s390x.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.0.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.1.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml | 7 ++++++-
.../domaincapsdata/qemu_4.2.0-virt.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0.s390x.xml | 7 ++++++-
tests/domaincapsdata/qemu_4.2.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml | 7 ++++++-
.../domaincapsdata/qemu_5.0.0-virt.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.0.0.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.0.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.1.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml | 7 ++++++-
.../domaincapsdata/qemu_5.2.0-virt.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0.aarch64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0.ppc64.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0.s390x.xml | 7 ++++++-
tests/domaincapsdata/qemu_5.2.0.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml | 7 ++++++-
tests/domaincapsdata/qemu_6.0.0.x86_64.xml | 7 ++++++-
.../qemucapabilitiesdata/caps_2.10.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_2.11.0.x86_64.xml | 1 +
.../caps_2.12.0.aarch64.xml | 1 +
.../qemucapabilitiesdata/caps_2.12.0.ppc64.xml | 1 +
.../qemucapabilitiesdata/caps_2.12.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 +
.../qemucapabilitiesdata/caps_3.0.0.x86_64.xml | 1 +
tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 +
.../qemucapabilitiesdata/caps_3.1.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_4.0.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml | 1 +
.../qemucapabilitiesdata/caps_4.0.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_4.1.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_4.2.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml | 1 +
.../qemucapabilitiesdata/caps_4.2.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_5.0.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1 +
.../qemucapabilitiesdata/caps_5.0.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_5.1.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_5.2.0.aarch64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml | 1 +
tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml | 1 +
.../qemucapabilitiesdata/caps_5.2.0.x86_64.xml | 1 +
.../qemucapabilitiesdata/caps_6.0.0.x86_64.xml | 1 +
.../qemuxml2argvdata/cpu-cache-passthrough3.err | 2 +-
94 files changed, 431 insertions(+), 73 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index ecfb313d0a..58e28c3bd1 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -2336,6 +2336,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
return cpus && cpus->ncpus > 0;
case VIR_CPU_MODE_MAXIMUM:
+ return virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX);
+
case VIR_CPU_MODE_LAST:
break;
}
@@ -2985,7 +2987,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
virQEMUCapsAccelPtr accel,
qemuMonitorPtr mon)
{
- qemuMonitorCPUDefsPtr defs = accel->cpuModels;
+ qemuMonitorCPUDefsPtr defs;
size_t i;
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
@@ -2994,6 +2996,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &accel->cpuModels) < 0)
return -1;
+ defs = accel->cpuModels;
for (i = 0; i < defs->ncpus; i++) {
if (STREQ_NULLABLE(defs->cpus[i].name, "max")) {
virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_MAX);
@@ -5977,6 +5980,18 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCapsPtr qemuCaps,
VIR_TRISTATE_SWITCH_OFF);
}
+ if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
+ VIR_CPU_MODE_MAXIMUM,
+ domCaps->machine)) {
+ domCaps->cpu.maximum = true;
+
+ domCaps->cpu.maximumMigratable.report = true;
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
+ VIR_TRISTATE_SWITCH_ON);
+ VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
+ VIR_TRISTATE_SWITCH_OFF);
+ }
+
if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
VIR_CPU_MODE_HOST_MODEL,
domCaps->machine)) {
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 059563d92f..f0333d4f1a 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -6316,7 +6316,11 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
switch ((virCPUMode) cpu->mode) {
case VIR_CPU_MODE_HOST_PASSTHROUGH:
- virBufferAddLit(buf, "host");
+ case VIR_CPU_MODE_MAXIMUM:
+ if (cpu->mode == VIR_CPU_MODE_MAXIMUM)
+ virBufferAddLit(buf, "max");
+ else
+ virBufferAddLit(buf, "host");
if (def->os.arch == VIR_ARCH_ARMV7L &&
driver->hostarch == VIR_ARCH_AARCH64) {
@@ -6356,7 +6360,6 @@ qemuBuildCpuModelArgStr(virQEMUDriverPtr driver,
virBufferAdd(buf, cpu->model, -1);
break;
- case VIR_CPU_MODE_MAXIMUM:
case VIR_CPU_MODE_LAST:
break;
}
@@ -6601,7 +6604,8 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
}
if (hostOff &&
- def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH &&
+ (def->cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH ||
+ def->cpu->mode == VIR_CPU_MODE_MAXIMUM) &&
virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_CACHE))
virBufferAddLit(&buf, ",host-cache-info=off");
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index d89aea340b..53b4fb5f4f 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -4049,12 +4049,14 @@ qemuDomainDefCPUPostParse(virDomainDefPtr def,
break;
case VIR_CPU_CACHE_MODE_PASSTHROUGH:
- if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+ if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
+ def->cpu->mode != VIR_CPU_MODE_MAXIMUM) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("CPU cache mode '%s' can only be used with "
- "'%s' CPUs"),
+ "'%s' / '%s' CPUs"),
virCPUCacheModeTypeToString(cache->mode),
- virCPUModeTypeToString(VIR_CPU_MODE_HOST_PASSTHROUGH));
+ virCPUModeTypeToString(VIR_CPU_MODE_HOST_PASSTHROUGH),
+ virCPUModeTypeToString(VIR_CPU_MODE_MAXIMUM));
return -1;
}
@@ -4136,6 +4138,7 @@ qemuDomainDefCPUPostParse(virDomainDefPtr def,
switch ((virCPUMode) def->cpu->mode) {
case VIR_CPU_MODE_HOST_PASSTHROUGH:
+ case VIR_CPU_MODE_MAXIMUM:
def->cpu->check = VIR_CPU_CHECK_NONE;
break;
@@ -4151,7 +4154,6 @@ qemuDomainDefCPUPostParse(virDomainDefPtr def,
def->cpu->check = VIR_CPU_CHECK_PARTIAL;
break;
- case VIR_CPU_MODE_MAXIMUM:
case VIR_CPU_MODE_LAST:
break;
}
@@ -6304,6 +6306,7 @@ qemuDomainObjCheckCPUTaint(virQEMUDriverPtr driver,
switch (obj->def->cpu->mode) {
case VIR_CPU_MODE_HOST_PASSTHROUGH:
+ case VIR_CPU_MODE_MAXIMUM:
if (incomingMigration)
qemuDomainObjTaint(driver, obj, VIR_DOMAIN_TAINT_HOST_CPU, logCtxt);
break;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index c34af6b7d1..b0d907fbb3 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -12314,6 +12314,8 @@ qemuConnectCompareHypervisorCPU(virConnectPtr conn,
if (!cpu->model) {
if (cpu->mode == VIR_CPU_MODE_HOST_PASSTHROUGH) {
cpu->model = g_strdup("host");
+ } else if (cpu->mode == VIR_CPU_MODE_MAXIMUM) {
+ cpu->model = g_strdup("max");
} else {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("cpu parameter is missing a model name"));
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index 30cfa4d485..8d21e45218 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -6156,8 +6156,9 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
if (virCPUConvertLegacy(hostarch, def->cpu) < 0)
return -1;
- /* nothing to update for host-passthrough */
- if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH) {
+ /* nothing to update for host-passthrough / maximum */
+ if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
+ def->cpu->mode != VIR_CPU_MODE_MAXIMUM) {
g_autoptr(virDomainCapsCPUModels) cpuModels = NULL;
if (def->cpu->check == VIR_CPU_CHECK_PARTIAL &&
@@ -8055,7 +8056,8 @@ qemuProcessRefreshCPUMigratability(virQEMUDriverPtr driver,
bool migratable;
int rc;
- if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH)
+ if (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
+ def->cpu->mode != VIR_CPU_MODE_MAXIMUM)
return 0;
/* If the cpu.migratable capability is present, the migratable attribute
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index bf4ac19104..62a915e946 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -255,10 +255,11 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
case VIR_DOMAIN_FEATURE_KVM:
if (def->kvm_features[VIR_DOMAIN_KVM_DEDICATED] == VIR_TRISTATE_SWITCH_ON &&
- (!def->cpu || def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH)) {
+ (!def->cpu || (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
+ def->cpu->mode != VIR_CPU_MODE_MAXIMUM))) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("kvm-hint-dedicated=on is only applicable "
- "for cpu host-passthrough"));
+ "for cpu host-passthrough / maximum"));
return -1;
}
break;
@@ -396,7 +397,15 @@ qemuValidateDomainDefCpu(virQEMUDriverPtr driver,
* CUSTOM.
*/
break;
+
case VIR_CPU_MODE_MAXIMUM:
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("maximum CPU is not supported by QEMU binary"));
+ return -1;
+ }
+ break;
+
case VIR_CPU_MODE_CUSTOM:
case VIR_CPU_MODE_LAST:
break;
diff --git a/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml
index e0314996c9..06507fdbd6 100644
--- a/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.10.0-q35.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Haswell-noTSX</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml
index 3a1cec224d..83f1b8eeb3 100644
--- a/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.10.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Opteron_G4</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_2.10.0.x86_64.xml b/tests/domaincapsdata/qemu_2.10.0.x86_64.xml
index f6db53e80d..1402425134 100644
--- a/tests/domaincapsdata/qemu_2.10.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.10.0.x86_64.xml
@@ -33,7 +33,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Haswell-noTSX</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml
index 742ea30a66..df11d98164 100644
--- a/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.11.0-q35.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml
index f077ca15e6..dd4b9eb3a5 100644
--- a/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.11.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_2.11.0.x86_64.xml b/tests/domaincapsdata/qemu_2.11.0.x86_64.xml
index fb683a82eb..bed878437b 100644
--- a/tests/domaincapsdata/qemu_2.11.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.11.0.x86_64.xml
@@ -33,7 +33,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml
index d0512678e0..d23323e896 100644
--- a/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Haswell-noTSX</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml
index d45c3cdcda..b7ed014bcc 100644
--- a/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml
index 8a6fbe9fe1..6fb16ea733 100644
--- a/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0-virt.aarch64.xml
@@ -32,7 +32,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_2.12.0.aarch64.xml b/tests/domaincapsdata/qemu_2.12.0.aarch64.xml
index 05fbfef6e8..890354eb5f 100644
--- a/tests/domaincapsdata/qemu_2.12.0.aarch64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0.aarch64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_2.12.0.ppc64.xml b/tests/domaincapsdata/qemu_2.12.0.ppc64.xml
index 310bef66c7..cbd2452163 100644
--- a/tests/domaincapsdata/qemu_2.12.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_2.12.0.x86_64.xml b/tests/domaincapsdata/qemu_2.12.0.x86_64.xml
index 456d13d8a0..ac3a707d08 100644
--- a/tests/domaincapsdata/qemu_2.12.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.12.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Haswell-noTSX</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.9.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_2.9.0-q35.x86_64.xml
index 440529443c..797b970040 100644
--- a/tests/domaincapsdata/qemu_2.9.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.9.0-q35.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_2.9.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_2.9.0-tcg.x86_64.xml
index 77bf8f4c52..b47c426f1b 100644
--- a/tests/domaincapsdata/qemu_2.9.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.9.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Opteron_G4</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_2.9.0.x86_64.xml b/tests/domaincapsdata/qemu_2.9.0.x86_64.xml
index 50ef469308..7716e9d381 100644
--- a/tests/domaincapsdata/qemu_2.9.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_2.9.0.x86_64.xml
@@ -33,7 +33,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml
index 72bc877529..648244d37a 100644
--- a/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.0.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
index 9354167ff7..fde3f445a3 100644
--- a/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.0.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_3.0.0.ppc64.xml b/tests/domaincapsdata/qemu_3.0.0.ppc64.xml
index d8d8147bf4..7b8a2ab484 100644
--- a/tests/domaincapsdata/qemu_3.0.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_3.0.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_3.0.0.x86_64.xml b/tests/domaincapsdata/qemu_3.0.0.x86_64.xml
index 6561a9695c..898c191ab7 100644
--- a/tests/domaincapsdata/qemu_3.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.0.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml
index d57f1c78b3..97912f8119 100644
--- a/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.1.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
index be3d54d87e..02c9ce1d38 100644
--- a/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.1.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_3.1.0.ppc64.xml b/tests/domaincapsdata/qemu_3.1.0.ppc64.xml
index 0f5be3a16f..a3c1d7be5d 100644
--- a/tests/domaincapsdata/qemu_3.1.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_3.1.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_3.1.0.x86_64.xml b/tests/domaincapsdata/qemu_3.1.0.x86_64.xml
index 859f973a40..2819a22ee0 100644
--- a/tests/domaincapsdata/qemu_3.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_3.1.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml
index b873149375..d17068003d 100644
--- a/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
index 7a793ef8f9..e65b8c21a3 100644
--- a/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml
index e9eb19e39d..282a6b50da 100644
--- a/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0-virt.aarch64.xml
@@ -32,7 +32,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_4.0.0.aarch64.xml b/tests/domaincapsdata/qemu_4.0.0.aarch64.xml
index 43a492508f..a84b0d7a7a 100644
--- a/tests/domaincapsdata/qemu_4.0.0.aarch64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0.aarch64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_4.0.0.ppc64.xml b/tests/domaincapsdata/qemu_4.0.0.ppc64.xml
index 44d6cd5c2e..15a536f21c 100644
--- a/tests/domaincapsdata/qemu_4.0.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_4.0.0.s390x.xml b/tests/domaincapsdata/qemu_4.0.0.s390x.xml
index 7730f801ec..5a8f0eaf69 100644
--- a/tests/domaincapsdata/qemu_4.0.0.s390x.xml
+++ b/tests/domaincapsdata/qemu_4.0.0.s390x.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>z14.2-base</model>
<feature policy='require' name='aen'/>
diff --git a/tests/domaincapsdata/qemu_4.0.0.x86_64.xml b/tests/domaincapsdata/qemu_4.0.0.x86_64.xml
index a06a9fdc79..e11d68f2ee 100644
--- a/tests/domaincapsdata/qemu_4.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.0.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
index 5081f5175e..f3784936fb 100644
--- a/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.1.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
index 717b6b1b5a..d759d00c61 100644
--- a/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.1.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-IBPB</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
index 1094ff4685..3578e27c11 100644
--- a/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.1.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
index d76e5a9a18..8083dd2aeb 100644
--- a/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
index b90d300c42..ec001884b7 100644
--- a/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-IBPB</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml
index 814b2cf3f5..2ad2936d59 100644
--- a/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0-virt.aarch64.xml
@@ -32,7 +32,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml
index 2af62f7c07..72739fd752 100644
--- a/tests/domaincapsdata/qemu_4.2.0.aarch64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0.aarch64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>pxa262</model>
diff --git a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml
index 9523743b18..69cbd260cf 100644
--- a/tests/domaincapsdata/qemu_4.2.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_4.2.0.s390x.xml b/tests/domaincapsdata/qemu_4.2.0.s390x.xml
index b5d92836d5..17b28d84d1 100644
--- a/tests/domaincapsdata/qemu_4.2.0.s390x.xml
+++ b/tests/domaincapsdata/qemu_4.2.0.s390x.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>gen15a-base</model>
<feature policy='require' name='aen'/>
diff --git a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
index 682225719d..be1be2dcae 100644
--- a/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_4.2.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
index e376a36df0..590742b8d1 100644
--- a/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
index 7aa9dbdf0c..37aaa6f3da 100644
--- a/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
index 10ca10ae7d..b762c7108f 100644
--- a/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0-virt.aarch64.xml
@@ -32,7 +32,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>cortex-a9</model>
diff --git a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml
index 524e483834..c9561c6d92 100644
--- a/tests/domaincapsdata/qemu_5.0.0.aarch64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0.aarch64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>cortex-a9</model>
diff --git a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml
index e2339d7600..fd088bd2d5 100644
--- a/tests/domaincapsdata/qemu_5.0.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
index 49a8481f24..16f3459c48 100644
--- a/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.0.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>Skylake-Client-IBRS</model>
<vendor>Intel</vendor>
diff --git a/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
index b654c741f4..41c59755df 100644
--- a/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.1.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
index 8033951a6f..9afba50265 100644
--- a/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.1.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.1.0.x86_64.xml b/tests/domaincapsdata/qemu_5.1.0.x86_64.xml
index 3a4a2fc071..ab3a7474d3 100644
--- a/tests/domaincapsdata/qemu_5.1.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.1.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml
index 8f9e620b04..0ac7b1240f 100644
--- a/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml
index 44e93d11d5..7fcbb8c0f2 100644
--- a/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml b/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml
index 1f837587f7..a5b063e7f8 100644
--- a/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0-virt.aarch64.xml
@@ -32,7 +32,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>cortex-a9</model>
diff --git a/tests/domaincapsdata/qemu_5.2.0.aarch64.xml b/tests/domaincapsdata/qemu_5.2.0.aarch64.xml
index 524e483834..c9561c6d92 100644
--- a/tests/domaincapsdata/qemu_5.2.0.aarch64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0.aarch64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='no'/>
<mode name='custom' supported='yes'>
<model usable='unknown'>cortex-a9</model>
diff --git a/tests/domaincapsdata/qemu_5.2.0.ppc64.xml b/tests/domaincapsdata/qemu_5.2.0.ppc64.xml
index f121524f2a..93e020302e 100644
--- a/tests/domaincapsdata/qemu_5.2.0.ppc64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0.ppc64.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='allow'>POWER8</model>
</mode>
diff --git a/tests/domaincapsdata/qemu_5.2.0.s390x.xml b/tests/domaincapsdata/qemu_5.2.0.s390x.xml
index e146dfb769..d54f88fc10 100644
--- a/tests/domaincapsdata/qemu_5.2.0.s390x.xml
+++ b/tests/domaincapsdata/qemu_5.2.0.s390x.xml
@@ -30,7 +30,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>gen15a-base</model>
<feature policy='require' name='aen'/>
diff --git a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml
index 331117c39c..35dca37b28 100644
--- a/tests/domaincapsdata/qemu_5.2.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_5.2.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml
index 819c5dde97..ae0d4a6264 100644
--- a/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml
+++ b/tests/domaincapsdata/qemu_6.0.0-q35.x86_64.xml
@@ -35,7 +35,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml
index d4b9e48275..bd2c51f34b 100644
--- a/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml
+++ b/tests/domaincapsdata/qemu_6.0.0-tcg.x86_64.xml
@@ -29,7 +29,12 @@
</os>
<cpu>
<mode name='host-passthrough' supported='no'/>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC</model>
<vendor>AMD</vendor>
diff --git a/tests/domaincapsdata/qemu_6.0.0.x86_64.xml b/tests/domaincapsdata/qemu_6.0.0.x86_64.xml
index 1661a48934..e104a6b2d8 100644
--- a/tests/domaincapsdata/qemu_6.0.0.x86_64.xml
+++ b/tests/domaincapsdata/qemu_6.0.0.x86_64.xml
@@ -34,7 +34,12 @@
<value>off</value>
</enum>
</mode>
- <mode name='maximum' supported='no'/>
+ <mode name='maximum' supported='yes'>
+ <enum name='maximumMigratable'>
+ <value>on</value>
+ <value>off</value>
+ </enum>
+ </mode>
<mode name='host-model' supported='yes'>
<model fallback='forbid'>EPYC-Rome</model>
<vendor>AMD</vendor>
diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
index 2fe1888535..579b88c17f 100644
--- a/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
@@ -193,6 +193,7 @@
<flag name='fsdev.createmode'/>
<flag name='dc390'/>
<flag name='am53c974'/>
+ <flag name='cpu-max'/>
<version>2010000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100287</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
index 56024cfa5d..2c475d73bc 100644
--- a/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
@@ -200,6 +200,7 @@
<flag name='fsdev.createmode'/>
<flag name='dc390'/>
<flag name='am53c974'/>
+ <flag name='cpu-max'/>
<version>2011000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100288</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
index 3ff1bf3ff8..d4dad8d8b2 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.aarch64.xml
@@ -167,6 +167,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>2012000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>61700289</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
index 9311bf66db..f441354054 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
@@ -168,6 +168,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>2011090</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900289</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
index df0ce08da6..d54e305e2e 100644
--- a/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
@@ -211,6 +211,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>2011090</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100289</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
index d984ad3066..37406cb4a9 100644
--- a/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
@@ -186,6 +186,7 @@
<flag name='migration-param.downtime'/>
<flag name='dc390'/>
<flag name='am53c974'/>
+ <flag name='cpu-max'/>
<version>2009000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100247</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
index dc0e8d637e..28cc662bfb 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
@@ -170,6 +170,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>2012050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900239</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
index 2ea912eaad..09bdbf7fc7 100644
--- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
@@ -217,6 +217,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>3000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100239</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
index b05f16983c..11d8d668de 100644
--- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
@@ -175,6 +175,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>3000091</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
index 8a892a5da3..7c7216826b 100644
--- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
@@ -220,6 +220,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>3000092</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
index c28ada94fb..c44d5c6ddf 100644
--- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml
@@ -181,6 +181,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>61700240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
index a15edd87de..7094752b29 100644
--- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
@@ -189,6 +189,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
index 4a10deea01..8cc3a51eeb 100644
--- a/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_4.0.0.s390x.xml
@@ -145,6 +145,7 @@
<flag name='migration-param.xbzrle-cache-size'/>
<flag name='fsdev.createmode'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>39100240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
index c580d29374..23a150348d 100644
--- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
@@ -226,6 +226,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100240</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
index 26eb3786e8..792ea9e9e9 100644
--- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
@@ -233,6 +233,7 @@
<flag name='am53c974'/>
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4001000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100241</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
index 4c149e79bb..20549834eb 100644
--- a/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.aarch64.xml
@@ -194,6 +194,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4001050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>61700242</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
index a0019f2a20..58c73f0a98 100644
--- a/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
@@ -195,6 +195,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4001050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900242</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
index 41db85be6b..9bfdb2ce63 100644
--- a/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.s390x.xml
@@ -156,6 +156,7 @@
<flag name='blockdev-hostdev-scsi'/>
<flag name='fsdev.createmode'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>39100242</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
index 976eaf347b..10dc5d562e 100644
--- a/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
@@ -242,6 +242,7 @@
<flag name='am53c974'/>
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>4002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100242</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
index b9963bbd7e..3e8c87ece3 100644
--- a/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.0.0.aarch64.xml
@@ -204,6 +204,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>61700241</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml
index 46edacd44b..49479c215f 100644
--- a/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml
@@ -213,6 +213,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900241</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
index f5bcc9ed83..99155d9097 100644
--- a/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.0.0.x86_64.xml
@@ -249,6 +249,7 @@
<flag name='am53c974'/>
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5000000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100241</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml
index f7d0be69cb..9e1fa172df 100644
--- a/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.1.0.x86_64.xml
@@ -251,6 +251,7 @@
<flag name='am53c974'/>
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5001000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100242</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml
index 6b40141f15..1f015c2da1 100644
--- a/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.2.0.aarch64.xml
@@ -208,6 +208,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>61700243</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml
index 298139cdd7..bc94e50e59 100644
--- a/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.2.0.ppc64.xml
@@ -215,6 +215,7 @@
<flag name='dc390'/>
<flag name='am53c974'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>42900243</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml b/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml
index b59404230c..8ca989facb 100644
--- a/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml
+++ b/tests/qemucapabilitiesdata/caps_5.2.0.s390x.xml
@@ -163,6 +163,7 @@
<flag name='netdev.vhost-vdpa'/>
<flag name='fsdev.createmode'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>39100243</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml
index 52a755ffc8..c85362e1db 100644
--- a/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_5.2.0.x86_64.xml
@@ -252,6 +252,7 @@
<flag name='am53c974'/>
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5002000</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100243</microcodeVersion>
diff --git a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
index 0cb94e02e8..0f2467609c 100644
--- a/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_6.0.0.x86_64.xml
@@ -253,6 +253,7 @@
<flag name='virtio-pmem-pci'/>
<flag name='vhost-user-fs.bootindex'/>
<flag name='vhost-user-blk'/>
+ <flag name='cpu-max'/>
<version>5002050</version>
<kvmVersion>0</kvmVersion>
<microcodeVersion>43100242</microcodeVersion>
diff --git a/tests/qemuxml2argvdata/cpu-cache-passthrough3.err b/tests/qemuxml2argvdata/cpu-cache-passthrough3.err
index 2d64cda5e5..6581f143d6 100644
--- a/tests/qemuxml2argvdata/cpu-cache-passthrough3.err
+++ b/tests/qemuxml2argvdata/cpu-cache-passthrough3.err
@@ -1 +1 @@
-unsupported configuration: CPU cache mode 'passthrough' can only be used with 'host-passthrough' CPUs
+unsupported configuration: CPU cache mode 'passthrough' can only be used with 'host-passthrough' / 'maximum' CPUs
--
2.29.2
Patch series looks fine to me, and we can certainly use this feature. One question I have about it: Does this apply to all architectures equally, or will we need to detect it from capabilities? I mean to say, if this was added to libvirt version X, then I might mandate that you have to use libvirt >= X and not bother detecting it (as the feature is so useful). But if it applies only on some architectures then we'd have to detect it anyway. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-df lists disk usage of guests without needing to install any software inside the virtual machine. Supports Linux and Windows. http://people.redhat.com/~rjones/virt-df/
On Tue, Feb 09, 2021 at 02:21:32PM +0000, Richard W.M. Jones wrote: > > Patch series looks fine to me, and we can certainly use this feature. > > One question I have about it: Does this apply to all architectures > equally, or will we need to detect it from capabilities? I mean to > say, if this was added to libvirt version X, then I might mandate that > you have to use libvirt >= X and not bother detecting it (as the > feature is so useful). But if it applies only on some architectures > then we'd have to detect it anyway. Most but not all QEMU architectures. riscv64 is a notable one that lacks "-cpu max" in QEMU. For that matter, it may well lack "-cpu host" too from what i see ? Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On Tue, Feb 09, 2021 at 01:59:01PM +0000, Daniel P. Berrangé wrote:
> The "max" model can be treated the same way as "host" model in general.
>
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
> 94 files changed, 431 insertions(+), 73 deletions(-)
>
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index ecfb313d0a..58e28c3bd1 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
> @@ -2336,6 +2336,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
> return cpus && cpus->ncpus > 0;
>
> case VIR_CPU_MODE_MAXIMUM:
> + return virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX);
> +
> case VIR_CPU_MODE_LAST:
> break;
> }
> @@ -2985,7 +2987,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> virQEMUCapsAccelPtr accel,
> qemuMonitorPtr mon)
> {
> - qemuMonitorCPUDefsPtr defs = accel->cpuModels;
> + qemuMonitorCPUDefsPtr defs;
> size_t i;
>
> if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
> @@ -2994,6 +2996,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &accel->cpuModels) < 0)
> return -1;
>
> + defs = accel->cpuModels;
And there is the fix for the crash from previous patch, so please do it
directly there.
> for (i = 0; i < defs->ncpus; i++) {
> if (STREQ_NULLABLE(defs->cpus[i].name, "max")) {
> virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_MAX);
> @@ -5977,6 +5980,18 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCapsPtr qemuCaps,
> VIR_TRISTATE_SWITCH_OFF);
> }
>
> + if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
> + VIR_CPU_MODE_MAXIMUM,
> + domCaps->machine)) {
> + domCaps->cpu.maximum = true;
> +
> + domCaps->cpu.maximumMigratable.report = true;
> + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
> + VIR_TRISTATE_SWITCH_ON);
> + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
> + VIR_TRISTATE_SWITCH_OFF);
> + }
> +
> if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
> VIR_CPU_MODE_HOST_MODEL,
> domCaps->machine)) {
[...]
> diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> index bf4ac19104..62a915e946 100644
> --- a/src/qemu/qemu_validate.c
> +++ b/src/qemu/qemu_validate.c
> @@ -255,10 +255,11 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
>
> case VIR_DOMAIN_FEATURE_KVM:
> if (def->kvm_features[VIR_DOMAIN_KVM_DEDICATED] == VIR_TRISTATE_SWITCH_ON &&
> - (!def->cpu || def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH)) {
> + (!def->cpu || (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
> + def->cpu->mode != VIR_CPU_MODE_MAXIMUM))) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> _("kvm-hint-dedicated=on is only applicable "
> - "for cpu host-passthrough"));
> + "for cpu host-passthrough / maximum"));
> return -1;
> }
> break;
> @@ -396,7 +397,15 @@ qemuValidateDomainDefCpu(virQEMUDriverPtr driver,
> * CUSTOM.
> */
> break;
> +
> case VIR_CPU_MODE_MAXIMUM:
> + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("maximum CPU is not supported by QEMU binary"));
s/by QEMU/by this QEMU/
> + return -1;
> + }
> + break;
> +
> case VIR_CPU_MODE_CUSTOM:
> case VIR_CPU_MODE_LAST:
> break;
Otherwise looks good but it would need some changes if we do not trust
QEMU to behave the same way for kvm and tcg.
Pavel
On Tue, Feb 09, 2021 at 05:33:28PM +0100, Pavel Hrdina wrote:
> On Tue, Feb 09, 2021 at 01:59:01PM +0000, Daniel P. Berrangé wrote:
> > The "max" model can be treated the same way as "host" model in general.
> >
> > Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> > ---
> > 94 files changed, 431 insertions(+), 73 deletions(-)
> >
> > diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> > index ecfb313d0a..58e28c3bd1 100644
> > --- a/src/qemu/qemu_capabilities.c
> > +++ b/src/qemu/qemu_capabilities.c
> > @@ -2336,6 +2336,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
> > return cpus && cpus->ncpus > 0;
> >
> > case VIR_CPU_MODE_MAXIMUM:
> > + return virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX);
> > +
> > case VIR_CPU_MODE_LAST:
> > break;
> > }
> > @@ -2985,7 +2987,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> > virQEMUCapsAccelPtr accel,
> > qemuMonitorPtr mon)
> > {
> > - qemuMonitorCPUDefsPtr defs = accel->cpuModels;
> > + qemuMonitorCPUDefsPtr defs;
> > size_t i;
> >
> > if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_QUERY_CPU_DEFINITIONS))
> > @@ -2994,6 +2996,7 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
> > if (virQEMUCapsFetchCPUDefinitions(mon, qemuCaps->arch, &accel->cpuModels) < 0)
> > return -1;
> >
> > + defs = accel->cpuModels;
>
> And there is the fix for the crash from previous patch, so please do it
> directly there.
>
> > for (i = 0; i < defs->ncpus; i++) {
> > if (STREQ_NULLABLE(defs->cpus[i].name, "max")) {
> > virQEMUCapsSet(qemuCaps, QEMU_CAPS_CPU_MAX);
> > @@ -5977,6 +5980,18 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCapsPtr qemuCaps,
> > VIR_TRISTATE_SWITCH_OFF);
> > }
> >
> > + if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
> > + VIR_CPU_MODE_MAXIMUM,
> > + domCaps->machine)) {
> > + domCaps->cpu.maximum = true;
> > +
> > + domCaps->cpu.maximumMigratable.report = true;
> > + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
> > + VIR_TRISTATE_SWITCH_ON);
> > + VIR_DOMAIN_CAPS_ENUM_SET(domCaps->cpu.maximumMigratable,
> > + VIR_TRISTATE_SWITCH_OFF);
> > + }
> > +
> > if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
> > VIR_CPU_MODE_HOST_MODEL,
> > domCaps->machine)) {
>
> [...]
>
> > diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
> > index bf4ac19104..62a915e946 100644
> > --- a/src/qemu/qemu_validate.c
> > +++ b/src/qemu/qemu_validate.c
> > @@ -255,10 +255,11 @@ qemuValidateDomainDefFeatures(const virDomainDef *def,
> >
> > case VIR_DOMAIN_FEATURE_KVM:
> > if (def->kvm_features[VIR_DOMAIN_KVM_DEDICATED] == VIR_TRISTATE_SWITCH_ON &&
> > - (!def->cpu || def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH)) {
> > + (!def->cpu || (def->cpu->mode != VIR_CPU_MODE_HOST_PASSTHROUGH &&
> > + def->cpu->mode != VIR_CPU_MODE_MAXIMUM))) {
> > virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > _("kvm-hint-dedicated=on is only applicable "
> > - "for cpu host-passthrough"));
> > + "for cpu host-passthrough / maximum"));
> > return -1;
> > }
> > break;
> > @@ -396,7 +397,15 @@ qemuValidateDomainDefCpu(virQEMUDriverPtr driver,
> > * CUSTOM.
> > */
> > break;
> > +
> > case VIR_CPU_MODE_MAXIMUM:
> > + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_MAX)) {
> > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> > + _("maximum CPU is not supported by QEMU binary"));
>
> s/by QEMU/by this QEMU/
>
> > + return -1;
> > + }
> > + break;
> > +
> > case VIR_CPU_MODE_CUSTOM:
> > case VIR_CPU_MODE_LAST:
> > break;
>
> Otherwise looks good but it would need some changes if we do not trust
> QEMU to behave the same way for kvm and tcg.
>
> Pavel
No chages needed for the kvm vs tcg question so with the issues fixed
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
© 2016 - 2026 Red Hat, Inc.