]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: capabilities: Preserve location of the default machine type when stripping...
authorPeter Krempa <pkrempa@redhat.com>
Fri, 1 Sep 2023 19:43:22 +0000 (21:43 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 6 Sep 2023 12:09:42 +0000 (14:09 +0200)
Internally the preferred machine which is 'pc' for x86_64 must be kept
in the first place in the array of machines. This was not the case when
stripping the machine aliases for use in tests (so that test output
stays stable) where we've created a new entry for the alias. This means
that the original name (e.g. pc-i440fx-8.1) stayed in the first place.

To fix this we now swap the names around and create a new entry at the
end for the specific type. Additionally the default flag is not
propagated to the copy.

This is also visible now in the output of 'qemuxml2xmltest' as the test
cases which use the default machine type return to 'pc' instead of the
more specific name.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_capabilities.c
tests/qemuxml2xmloutdata/default-kvm-host-arch.x86_64-latest.xml
tests/qemuxml2xmloutdata/default-qemu-host-arch.x86_64-latest.xml

index b52e25a0727519c0ea092c152bdd3173eb78e733..972f3e24ee8ee92849f8f5efb3d0633d8a92beaa 100644 (file)
@@ -6756,11 +6756,21 @@ virQEMUCapsStripMachineAliasesForVirtType(virQEMUCaps *qemuCaps,
 
     for (i = 0; i < accel->nmachineTypes; i++) {
         virQEMUCapsMachineType *mach = &accel->machineTypes[i];
-        g_autofree char *name = g_steal_pointer(&mach->alias);
 
-        if (name) {
-            virQEMUCapsAddMachine(qemuCaps, virtType, name, NULL, mach->defaultCPU,
-                                  mach->maxCpus, mach->hotplugCpus, mach->qemuDefault,
+        if (mach->alias) {
+            g_autofree char *origName = g_steal_pointer(&mach->name);
+
+            /* The preferred machine type, which is generally the default by qemu
+             * in most cases but also generally an alias needs to be kept at the
+             * first entry in the list, because virQEMUCapsGetPreferredMachine
+             * picks the first element. Thus we create a new entry for the
+             * original machine name and replace the existing one by the alias. */
+            mach->name = g_steal_pointer(&mach->alias);
+
+            /* also de-assert the copy's default flag, to ensure we don't have multiple
+             * machines with it */
+            virQEMUCapsAddMachine(qemuCaps, virtType, origName, NULL, mach->defaultCPU,
+                                  mach->maxCpus, mach->hotplugCpus, false,
                                   mach->numaMemSupported, mach->defaultRAMid,
                                   mach->deprecated, mach->acpi);
         }
@@ -6778,6 +6788,9 @@ virQEMUCapsStripMachineAliasesForVirtType(virQEMUCaps *qemuCaps,
  *
  * Remove all aliases so that the tests depending on the latest capabilities
  * file can be stable when new files are added.
+ *
+ * Additionally if a machine type is default, only the copy created for the
+ * alias will be kept as default to eliminate churn in output files.
  */
 void
 virQEMUCapsStripMachineAliases(virQEMUCaps *qemuCaps)
index a9de07d41cd945a741d1e7888778c30af2532639..c5f03ff2c1a21dd5efcf520fd093834ae729f629 100644 (file)
@@ -5,7 +5,7 @@
   <currentMemory unit='KiB'>4194304</currentMemory>
   <vcpu placement='static'>4</vcpu>
   <os>
-    <type arch='x86_64' machine='pc-i440fx-8.1'>hvm</type>
+    <type arch='x86_64' machine='pc'>hvm</type>
     <boot dev='hd'/>
   </os>
   <cpu mode='custom' match='exact' check='none'>
index 37673010f6b7eb966495fd786070d454937c5618..36ed26c473cd527a28d02003cf88a3ae8c2451c2 100644 (file)
@@ -5,7 +5,7 @@
   <currentMemory unit='KiB'>4194304</currentMemory>
   <vcpu placement='static'>4</vcpu>
   <os>
-    <type arch='x86_64' machine='pc-i440fx-8.1'>hvm</type>
+    <type arch='x86_64' machine='pc'>hvm</type>
     <boot dev='hd'/>
   </os>
   <cpu mode='custom' match='exact' check='none'>