We need to create a mapping between CPU model names and their
corresponding QOM types.
Signed-off-by: Jiri Denemark <jdenemar(a)redhat.com>
Reviewed-by: Ján Tomko <jtomko(a)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'/>
...