[PATCH v1 6/9] domain: capabilities: report host-recommended CPU model

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Report the host-recommended CPU definition in the domaincapabilities.
Currently, only s390x supports this model, but the formatting remains
open if other archs decide to support this as well.

Signed-off-by: Collin Walling <walling@xxxxxxxxxxxxx>
Reviewed-by: Boris Fiuczynski <fiuczy@xxxxxxxxxxxxx>
---
 src/conf/domain_capabilities.c            | 16 +++++++
 src/conf/domain_capabilities.h            |  1 +
 src/conf/schemas/domaincaps.rng           | 24 ++++++++++
 src/qemu/qemu_capabilities.c              |  8 ++++
 tests/domaincapsdata/qemu_8.1.0.s390x.xml | 55 +++++++++++++++++++++++
 5 files changed, 104 insertions(+)

diff --git a/src/conf/domain_capabilities.c b/src/conf/domain_capabilities.c
index 2fa5756184..4b9019f252 100644
--- a/src/conf/domain_capabilities.c
+++ b/src/conf/domain_capabilities.c
@@ -450,6 +450,22 @@ virDomainCapsCPUFormat(virBuffer *buf,
         virBufferAddLit(buf, "supported='no'/>\n");
     }
 
+    if (cpu->hostRecommended) {
+        virBufferAsprintf(buf, "<mode name='%s' ",
+                        virCPUModeTypeToString(VIR_CPU_MODE_HOST_RECOMMENDED));
+        if (cpu->hostRecommended) {
+            virBufferAddLit(buf, "supported='yes'>\n");
+            virBufferAdjustIndent(buf, 2);
+
+            virCPUDefFormatBuf(buf, cpu->hostRecommended);
+
+            virBufferAdjustIndent(buf, -2);
+            virBufferAddLit(buf, "</mode>\n");
+        } else {
+            virBufferAddLit(buf, "supported='no'/>\n");
+        }
+    }
+
     virBufferAsprintf(buf, "<mode name='%s' ",
                       virCPUModeTypeToString(VIR_CPU_MODE_CUSTOM));
     if (cpu->custom && cpu->custom->nmodels) {
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index 01bcfa2e39..893101ee97 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -201,6 +201,7 @@ struct _virDomainCapsCPU {
     bool maximum;
     virDomainCapsEnum maximumMigratable;
     virCPUDef *hostModel;
+    virCPUDef *hostRecommended;
     virDomainCapsCPUModels *custom;
 };
 
diff --git a/src/conf/schemas/domaincaps.rng b/src/conf/schemas/domaincaps.rng
index 99ef148d44..91657555dd 100644
--- a/src/conf/schemas/domaincaps.rng
+++ b/src/conf/schemas/domaincaps.rng
@@ -93,6 +93,9 @@
       <ref name="cpuHost"/>
       <ref name="cpuMax"/>
       <ref name="cpuHostModel"/>
+      <optional>
+        <ref name="cpuHostRecModel"/>
+      </optional>
       <ref name="cpuCustom"/>
     </element>
   </define>
@@ -142,6 +145,27 @@
     </element>
   </define>
 
+  <define name="cpuHostRecModel">
+    <element name="mode">
+      <attribute name="name">
+        <value>host-recommended</value>
+      </attribute>
+      <ref name="supported"/>
+      <optional>
+        <ref name="cpuModel"/>
+        <optional>
+          <ref name="cpuVendor"/>
+        </optional>
+        <optional>
+          <ref name="cpuMaxPhysAddr"/>
+        </optional>
+        <zeroOrMore>
+          <ref name="cpuFeature"/>
+        </zeroOrMore>
+      </optional>
+    </element>
+  </define>
+
   <define name="cpuCustom">
     <element name="mode">
       <attribute name="name">
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index d7096a08c2..6ac8aaf248 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -6250,6 +6250,14 @@ virQEMUCapsFillDomainCPUCaps(virQEMUCaps *qemuCaps,
             domCaps->cpu.custom = NULL;
         }
     }
+
+    if (virQEMUCapsIsCPUModeSupported(qemuCaps, hostarch, domCaps->virttype,
+                                      VIR_CPU_MODE_HOST_RECOMMENDED,
+                                      domCaps->machine)) {
+        virCPUDef *cpu = virQEMUCapsGetHostModel(qemuCaps, domCaps->virttype,
+                                                 VIR_QEMU_CAPS_HOST_CPU_RECOMMENDED);
+        domCaps->cpu.hostRecommended = virCPUDefCopy(cpu);
+    }
 }
 
 
diff --git a/tests/domaincapsdata/qemu_8.1.0.s390x.xml b/tests/domaincapsdata/qemu_8.1.0.s390x.xml
index 37c7c3b8bf..68a456645c 100644
--- a/tests/domaincapsdata/qemu_8.1.0.s390x.xml
+++ b/tests/domaincapsdata/qemu_8.1.0.s390x.xml
@@ -90,6 +90,61 @@
       <feature policy='require' name='cmm'/>
       <feature policy='require' name='vxpdeh2'/>
     </mode>
+    <mode name='host-recommended' supported='yes'>
+      <model fallback='forbid'>gen16a-base</model>
+      <feature policy='require' name='nnpa'/>
+      <feature policy='require' name='aen'/>
+      <feature policy='require' name='cmmnt'/>
+      <feature policy='require' name='vxpdeh'/>
+      <feature policy='require' name='aefsi'/>
+      <feature policy='require' name='diag318'/>
+      <feature policy='disable' name='csske'/>
+      <feature policy='require' name='mepoch'/>
+      <feature policy='require' name='msa9'/>
+      <feature policy='require' name='msa8'/>
+      <feature policy='require' name='msa7'/>
+      <feature policy='require' name='msa6'/>
+      <feature policy='require' name='msa5'/>
+      <feature policy='require' name='msa4'/>
+      <feature policy='require' name='msa3'/>
+      <feature policy='require' name='msa2'/>
+      <feature policy='require' name='msa1'/>
+      <feature policy='require' name='sthyi'/>
+      <feature policy='require' name='edat'/>
+      <feature policy='require' name='ri'/>
+      <feature policy='require' name='deflate'/>
+      <feature policy='require' name='edat2'/>
+      <feature policy='require' name='etoken'/>
+      <feature policy='require' name='vx'/>
+      <feature policy='require' name='ipter'/>
+      <feature policy='require' name='pai'/>
+      <feature policy='require' name='paie'/>
+      <feature policy='require' name='mepochptff'/>
+      <feature policy='require' name='ap'/>
+      <feature policy='require' name='vxeh'/>
+      <feature policy='require' name='vxpd'/>
+      <feature policy='require' name='esop'/>
+      <feature policy='require' name='msa9_pckmo'/>
+      <feature policy='require' name='vxeh2'/>
+      <feature policy='require' name='esort'/>
+      <feature policy='require' name='apqi'/>
+      <feature policy='require' name='apft'/>
+      <feature policy='require' name='els'/>
+      <feature policy='require' name='iep'/>
+      <feature policy='require' name='apqci'/>
+      <feature policy='disable' name='cte'/>
+      <feature policy='require' name='ais'/>
+      <feature policy='disable' name='bpb'/>
+      <feature policy='require' name='gs'/>
+      <feature policy='require' name='ppa15'/>
+      <feature policy='require' name='zpci'/>
+      <feature policy='require' name='rdp'/>
+      <feature policy='require' name='sea_esop2'/>
+      <feature policy='require' name='beareh'/>
+      <feature policy='disable' name='te'/>
+      <feature policy='require' name='cmm'/>
+      <feature policy='require' name='vxpdeh2'/>
+    </mode>
     <mode name='custom' supported='yes'>
       <model usable='yes' vendor='IBM'>gen16a-base</model>
       <model usable='yes' vendor='IBM'>gen16a</model>
-- 
2.41.0




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux