[libvirt] [PATCH v3 21/52] qemu: Store typename from query-cpu-definitions in qemuCaps

Jiri Denemark jdenemar at redhat.com
Tue Nov 5 13:27:19 UTC 2019


We need to create a mapping between CPU model names and their
corresponding QOM types.

Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
Reviewed-by: Ján Tomko <jtomko at redhat.com>
---

Notes:
    Version 2:
    - ignore empty typename strings
    
    Version 3:
    - g_strdup

 src/qemu/qemu_capabilities.c                  |   3 +
 src/qemu/qemu_monitor.c                       |   2 +
 src/qemu/qemu_monitor.h                       |   1 +
 src/qemu/qemu_monitor_json.c                  |   5 +
 .../caps_2.10.0.aarch64.xml                   | 126 ++---
 .../caps_2.10.0.ppc64.xml                     | 512 ++++++++---------
 .../caps_2.10.0.s390x.xml                     | 264 ++++-----
 .../caps_2.10.0.x86_64.xml                    | 132 ++---
 .../caps_2.11.0.s390x.xml                     | 264 ++++-----
 .../caps_2.11.0.x86_64.xml                    | 136 ++---
 .../caps_2.12.0.aarch64.xml                   | 136 ++---
 .../caps_2.12.0.ppc64.xml                     | 516 +++++++++---------
 .../caps_2.12.0.s390x.xml                     | 264 ++++-----
 .../caps_2.12.0.x86_64.xml                    | 180 +++---
 .../qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 512 ++++++++---------
 .../qemucapabilitiesdata/caps_2.9.0.s390x.xml | 256 ++++-----
 .../caps_2.9.0.x86_64.xml                     | 128 ++---
 .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 516 +++++++++---------
 .../qemucapabilitiesdata/caps_3.0.0.s390x.xml | 272 ++++-----
 .../caps_3.0.0.x86_64.xml                     | 184 +++----
 .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 516 +++++++++---------
 .../caps_3.1.0.x86_64.xml                     | 196 +++----
 .../caps_4.0.0.aarch64.xml                    | 148 ++---
 .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 516 +++++++++---------
 .../qemucapabilitiesdata/caps_4.0.0.s390x.xml | 284 +++++-----
 .../caps_4.0.0.x86_64.xml                     | 196 +++----
 .../caps_4.1.0.x86_64.xml                     | 400 +++++++-------
 .../caps_4.2.0.aarch64.xml                    | 148 ++---
 .../qemucapabilitiesdata/caps_4.2.0.ppc64.xml | 516 +++++++++---------
 .../qemucapabilitiesdata/caps_4.2.0.s390x.xml | 300 +++++-----
 .../caps_4.2.0.x86_64.xml                     | 400 +++++++-------
 31 files changed, 4020 insertions(+), 4009 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index ccb337ee2f..665fee28eb 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3528,6 +3528,8 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
             return -1;
         }
 
+        cpu->type = virXMLPropString(nodes[i], "typename");
+
         node = ctxt->node;
         ctxt->node = nodes[i];
         nblockers = virXPathNodeSet("./blocker", ctxt, &blockerNodes);
@@ -3989,6 +3991,7 @@ virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps,
 
         virBufferAsprintf(buf, "<cpu type='%s' ", typeStr);
         virBufferEscapeString(buf, "name='%s'", cpu->name);
+        virBufferEscapeString(buf, " typename='%s'", cpu->type);
         if (cpu->usable) {
             virBufferAsprintf(buf, " usable='%s'",
                               virDomainCapsCPUUsableTypeToString(cpu->usable));
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 39c3122074..a1cdb19318 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -3574,6 +3574,7 @@ qemuMonitorCPUDefsFree(qemuMonitorCPUDefsPtr defs)
     for (i = 0; i < defs->ncpus; i++) {
         g_strfreev(defs->cpus[i].blockers);
         g_free(defs->cpus[i].name);
+        g_free(defs->cpus[i].type);
     }
 
     g_free(defs->cpus);
@@ -3610,6 +3611,7 @@ qemuMonitorCPUDefsCopy(qemuMonitorCPUDefsPtr src)
 
         cpuDst->usable = cpuSrc->usable;
         cpuDst->name = g_strdup(cpuSrc->name);
+        cpuDst->type = g_strdup(cpuSrc->type);
         cpuDst->blockers = g_strdupv(cpuSrc->blockers);
     }
 
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index 0eed8b3f9e..824b580344 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -1109,6 +1109,7 @@ typedef qemuMonitorCPUDefInfo *qemuMonitorCPUDefInfoPtr;
 struct _qemuMonitorCPUDefInfo {
     virDomainCapsCPUUsable usable;
     char *name;
+    char *type;
     char **blockers; /* NULL-terminated string list */
 };
 
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 54963233e6..3f3bfc1720 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -5621,6 +5621,11 @@ qemuMonitorJSONGetCPUDefinitions(qemuMonitorPtr mon,
 
         cpu->name = g_strdup(tmp);
 
+        if ((tmp = virJSONValueObjectGetString(child, "typename")) &&
+            *tmp &&
+            VIR_STRDUP(cpu->type, tmp) < 0)
+            return -1;
+
         if (virJSONValueObjectHasKey(child, "unavailable-features")) {
             virJSONValuePtr blockers;
             size_t j;
diff --git a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
index f0bf003528..ad4f5447ed 100644
--- a/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.10.0.aarch64.xml
@@ -144,69 +144,69 @@
   <microcodeVersion>61700287</microcodeVersion>
   <package> (v2.10.0)</package>
   <arch>aarch64</arch>
-  <cpu type='kvm' name='pxa262'/>
-  <cpu type='kvm' name='pxa270-a0'/>
-  <cpu type='kvm' name='arm1136'/>
-  <cpu type='kvm' name='cortex-a15'/>
-  <cpu type='kvm' name='pxa260'/>
-  <cpu type='kvm' name='arm1136-r2'/>
-  <cpu type='kvm' name='pxa261'/>
-  <cpu type='kvm' name='pxa255'/>
-  <cpu type='kvm' name='arm926'/>
-  <cpu type='kvm' name='arm11mpcore'/>
-  <cpu type='kvm' name='pxa250'/>
-  <cpu type='kvm' name='ti925t'/>
-  <cpu type='kvm' name='cortex-a57'/>
-  <cpu type='kvm' name='sa1110'/>
-  <cpu type='kvm' name='arm1176'/>
-  <cpu type='kvm' name='cortex-a53'/>
-  <cpu type='kvm' name='host'/>
-  <cpu type='kvm' name='sa1100'/>
-  <cpu type='kvm' name='pxa270-c5'/>
-  <cpu type='kvm' name='cortex-a9'/>
-  <cpu type='kvm' name='cortex-a8'/>
-  <cpu type='kvm' name='pxa270-c0'/>
-  <cpu type='kvm' name='cortex-a7'/>
-  <cpu type='kvm' name='arm1026'/>
-  <cpu type='kvm' name='pxa270-b1'/>
-  <cpu type='kvm' name='cortex-m3'/>
-  <cpu type='kvm' name='cortex-m4'/>
-  <cpu type='kvm' name='pxa270-b0'/>
-  <cpu type='kvm' name='arm946'/>
-  <cpu type='kvm' name='cortex-r5'/>
-  <cpu type='kvm' name='pxa270-a1'/>
-  <cpu type='kvm' name='pxa270'/>
-  <cpu type='tcg' name='pxa262'/>
-  <cpu type='tcg' name='pxa270-a0'/>
-  <cpu type='tcg' name='arm1136'/>
-  <cpu type='tcg' name='cortex-a15'/>
-  <cpu type='tcg' name='pxa260'/>
-  <cpu type='tcg' name='arm1136-r2'/>
-  <cpu type='tcg' name='pxa261'/>
-  <cpu type='tcg' name='pxa255'/>
-  <cpu type='tcg' name='arm926'/>
-  <cpu type='tcg' name='arm11mpcore'/>
-  <cpu type='tcg' name='pxa250'/>
-  <cpu type='tcg' name='ti925t'/>
-  <cpu type='tcg' name='cortex-a57'/>
-  <cpu type='tcg' name='sa1110'/>
-  <cpu type='tcg' name='arm1176'/>
-  <cpu type='tcg' name='cortex-a53'/>
-  <cpu type='tcg' name='sa1100'/>
-  <cpu type='tcg' name='pxa270-c5'/>
-  <cpu type='tcg' name='cortex-a9'/>
-  <cpu type='tcg' name='cortex-a8'/>
-  <cpu type='tcg' name='pxa270-c0'/>
-  <cpu type='tcg' name='cortex-a7'/>
-  <cpu type='tcg' name='arm1026'/>
-  <cpu type='tcg' name='pxa270-b1'/>
-  <cpu type='tcg' name='cortex-m3'/>
-  <cpu type='tcg' name='cortex-m4'/>
-  <cpu type='tcg' name='pxa270-b0'/>
-  <cpu type='tcg' name='arm946'/>
-  <cpu type='tcg' name='cortex-r5'/>
-  <cpu type='tcg' name='pxa270-a1'/>
-  <cpu type='tcg' name='pxa270'/>
+  <cpu type='kvm' name='pxa262' typename='pxa262-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/>
+  <cpu type='kvm' name='arm1136' typename='arm1136-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a15' typename='cortex-a15-arm-cpu'/>
+  <cpu type='kvm' name='pxa260' typename='pxa260-arm-cpu'/>
+  <cpu type='kvm' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/>
+  <cpu type='kvm' name='pxa261' typename='pxa261-arm-cpu'/>
+  <cpu type='kvm' name='pxa255' typename='pxa255-arm-cpu'/>
+  <cpu type='kvm' name='arm926' typename='arm926-arm-cpu'/>
+  <cpu type='kvm' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/>
+  <cpu type='kvm' name='pxa250' typename='pxa250-arm-cpu'/>
+  <cpu type='kvm' name='ti925t' typename='ti925t-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a57' typename='cortex-a57-arm-cpu'/>
+  <cpu type='kvm' name='sa1110' typename='sa1110-arm-cpu'/>
+  <cpu type='kvm' name='arm1176' typename='arm1176-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a53' typename='cortex-a53-arm-cpu'/>
+  <cpu type='kvm' name='host' typename='host-arm-cpu'/>
+  <cpu type='kvm' name='sa1100' typename='sa1100-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a9' typename='cortex-a9-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a8' typename='cortex-a8-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/>
+  <cpu type='kvm' name='cortex-a7' typename='cortex-a7-arm-cpu'/>
+  <cpu type='kvm' name='arm1026' typename='arm1026-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/>
+  <cpu type='kvm' name='cortex-m3' typename='cortex-m3-arm-cpu'/>
+  <cpu type='kvm' name='cortex-m4' typename='cortex-m4-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/>
+  <cpu type='kvm' name='arm946' typename='arm946-arm-cpu'/>
+  <cpu type='kvm' name='cortex-r5' typename='cortex-r5-arm-cpu'/>
+  <cpu type='kvm' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/>
+  <cpu type='kvm' name='pxa270' typename='pxa270-arm-cpu'/>
+  <cpu type='tcg' name='pxa262' typename='pxa262-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-a0' typename='pxa270-a0-arm-cpu'/>
+  <cpu type='tcg' name='arm1136' typename='arm1136-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a15' typename='cortex-a15-arm-cpu'/>
+  <cpu type='tcg' name='pxa260' typename='pxa260-arm-cpu'/>
+  <cpu type='tcg' name='arm1136-r2' typename='arm1136-r2-arm-cpu'/>
+  <cpu type='tcg' name='pxa261' typename='pxa261-arm-cpu'/>
+  <cpu type='tcg' name='pxa255' typename='pxa255-arm-cpu'/>
+  <cpu type='tcg' name='arm926' typename='arm926-arm-cpu'/>
+  <cpu type='tcg' name='arm11mpcore' typename='arm11mpcore-arm-cpu'/>
+  <cpu type='tcg' name='pxa250' typename='pxa250-arm-cpu'/>
+  <cpu type='tcg' name='ti925t' typename='ti925t-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a57' typename='cortex-a57-arm-cpu'/>
+  <cpu type='tcg' name='sa1110' typename='sa1110-arm-cpu'/>
+  <cpu type='tcg' name='arm1176' typename='arm1176-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a53' typename='cortex-a53-arm-cpu'/>
+  <cpu type='tcg' name='sa1100' typename='sa1100-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-c5' typename='pxa270-c5-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a9' typename='cortex-a9-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a8' typename='cortex-a8-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-c0' typename='pxa270-c0-arm-cpu'/>
+  <cpu type='tcg' name='cortex-a7' typename='cortex-a7-arm-cpu'/>
+  <cpu type='tcg' name='arm1026' typename='arm1026-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-b1' typename='pxa270-b1-arm-cpu'/>
+  <cpu type='tcg' name='cortex-m3' typename='cortex-m3-arm-cpu'/>
+  <cpu type='tcg' name='cortex-m4' typename='cortex-m4-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-b0' typename='pxa270-b0-arm-cpu'/>
+  <cpu type='tcg' name='arm946' typename='arm946-arm-cpu'/>
+  <cpu type='tcg' name='cortex-r5' typename='cortex-r5-arm-cpu'/>
+  <cpu type='tcg' name='pxa270-a1' typename='pxa270-a1-arm-cpu'/>
+  <cpu type='tcg' name='pxa270' typename='pxa270-arm-cpu'/>
   <machine name='integratorcp' maxCpus='1'/>
   <machine name='nuri' maxCpus='2'/>
   <machine name='mps2-an511' maxCpus='1'/>
...




More information about the libvir-list mailing list