[libvirt PATCH 5/5] qemu: wire up support for maximum CPU model

Daniel P. Berrangé berrange at redhat.com
Tue Feb 9 13:59:01 UTC 2021


The "max" model can be treated the same way as "host" model in general.

Signed-off-by: Daniel P. Berrangé <berrange at 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




More information about the libvir-list mailing list