diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 85b1a662b4..9e3d10f702 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -387,7 +387,8 @@ struct _virQEMUCaps {
virArch arch;
- virDomainCapsCPUModelsPtr cpuDefinitions;
+ virDomainCapsCPUModelsPtr kvmCPUModels;
+ virDomainCapsCPUModelsPtr tcgCPUModels;
size_t nmachineTypes;
struct virQEMUCapsMachineType *machineTypes;
@@ -691,7 +692,16 @@ virQEMUCapsParseX86Models(const char *output,
goto error;
} while ((p = next));
- qemuCaps->cpuDefinitions = cpus;
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
+ virDomainCapsCPUModelsPtr kvmCPUs;
+
+ if (!(kvmCPUs = virDomainCapsCPUModelsCopy(cpus)))
+ goto error;
+
+ qemuCaps->kvmCPUModels = kvmCPUs;
+ }
+ qemuCaps->tcgCPUModels = cpus;
+
return 0;
error:
@@ -740,7 +750,16 @@ virQEMUCapsParsePPCModels(const char *output,
goto error;
} while ((p = next));
- qemuCaps->cpuDefinitions = cpus;
+ if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
+ virDomainCapsCPUModelsPtr kvmCPUs;
+
+ if (!(kvmCPUs = virDomainCapsCPUModelsCopy(cpus)))
+ goto error;
+
+ qemuCaps->kvmCPUModels = kvmCPUs;
+ }
+ qemuCaps->tcgCPUModels = cpus;
+
return 0;
error:
@@ -2123,9 +2142,15 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps)
ret->arch = qemuCaps->arch;
- if (qemuCaps->cpuDefinitions) {
- ret->cpuDefinitions = virDomainCapsCPUModelsCopy(qemuCaps->cpuDefinitions);
- if (!ret->cpuDefinitions)
+ if (qemuCaps->kvmCPUModels) {
+ ret->kvmCPUModels = virDomainCapsCPUModelsCopy(qemuCaps->kvmCPUModels);
+ if (!ret->kvmCPUModels)
+ goto error;
+ }
+
+ if (qemuCaps->tcgCPUModels) {
+ ret->tcgCPUModels = virDomainCapsCPUModelsCopy(qemuCaps->tcgCPUModels);
+ if (!ret->tcgCPUModels)
goto error;
}
@@ -2169,7 +2194,8 @@ void virQEMUCapsDispose(void *obj)
}
VIR_FREE(qemuCaps->machineTypes);
- virObjectUnref(qemuCaps->cpuDefinitions);
+ virObjectUnref(qemuCaps->kvmCPUModels);
+ virObjectUnref(qemuCaps->tcgCPUModels);
virBitmapFree(qemuCaps->flags);
@@ -2320,17 +2346,30 @@ const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps)
int
virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType type,
const char **name,
size_t count)
{
size_t i;
+ virDomainCapsCPUModelsPtr cpus = NULL;
- if (!qemuCaps->cpuDefinitions &&
- !(qemuCaps->cpuDefinitions = virDomainCapsCPUModelsNew(count)))
- return -1;
+ if (type == VIR_DOMAIN_VIRT_KVM && qemuCaps->kvmCPUModels)
+ cpus = qemuCaps->kvmCPUModels;
+ else if (type == VIR_DOMAIN_VIRT_QEMU && qemuCaps->tcgCPUModels)
+ cpus = qemuCaps->tcgCPUModels;
+
+ if (!cpus) {
+ if (!(cpus = virDomainCapsCPUModelsNew(count)))
+ return -1;
+
+ if (type == VIR_DOMAIN_VIRT_KVM)
+ qemuCaps->kvmCPUModels = cpus;
+ else
+ qemuCaps->tcgCPUModels = cpus;
+ }
for (i = 0; i < count; i++) {
- if (virDomainCapsCPUModelsAdd(qemuCaps->cpuDefinitions, name[i], -1,
+ if (virDomainCapsCPUModelsAdd(cpus, name[i], -1,
VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
return -1;
}
@@ -2341,31 +2380,38 @@ virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
int
virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType type,
char ***names,
size_t *count)
{
size_t i;
char **models = NULL;
+ virDomainCapsCPUModelsPtr cpus;
*count = 0;
if (names)
*names = NULL;
- if (!qemuCaps->cpuDefinitions)
+ if (type == VIR_DOMAIN_VIRT_KVM)
+ cpus = qemuCaps->kvmCPUModels;
+ else
+ cpus = qemuCaps->tcgCPUModels;
+
+ if (!cpus)
return 0;
- if (names && VIR_ALLOC_N(models, qemuCaps->cpuDefinitions->nmodels) < 0)
+ if (names && VIR_ALLOC_N(models, cpus->nmodels) < 0)
return -1;
- for (i = 0; i < qemuCaps->cpuDefinitions->nmodels; i++) {
- virDomainCapsCPUModelPtr cpu = qemuCaps->cpuDefinitions->models + i;
+ for (i = 0; i < cpus->nmodels; i++) {
+ virDomainCapsCPUModelPtr cpu = cpus->models + i;
if (models && VIR_STRDUP(models[i], cpu->name) < 0)
goto error;
}
if (names)
*names = models;
- *count = qemuCaps->cpuDefinitions->nmodels;
+ *count = cpus->nmodels;
return 0;
error:
@@ -2387,6 +2433,8 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
virDomainVirtType type,
virCPUMode mode)
{
+ virDomainCapsCPUModelsPtr cpus;
+
switch (mode) {
case VIR_CPU_MODE_HOST_PASSTHROUGH:
return type == VIR_DOMAIN_VIRT_KVM &&
@@ -2396,8 +2444,11 @@ virQEMUCapsIsCPUModeSupported(virQEMUCapsPtr qemuCaps,
return !!qemuCaps->hostCPUModel;
case VIR_CPU_MODE_CUSTOM:
- return qemuCaps->cpuDefinitions &&
- qemuCaps->cpuDefinitions->nmodels > 0;
+ if (type == VIR_DOMAIN_VIRT_KVM)
+ cpus = qemuCaps->kvmCPUModels;
+ else
+ cpus = qemuCaps->tcgCPUModels;
+ return cpus && cpus->nmodels > 0;
case VIR_CPU_MODE_LAST:
break;
@@ -2714,8 +2765,10 @@ virQEMUCapsProbeQMPMachineTypes(virQEMUCapsPtr qemuCaps,
static int
virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
- qemuMonitorPtr mon)
+ qemuMonitorPtr mon,
+ bool tcg)
{
+ virDomainCapsCPUModelsPtr models;
qemuMonitorCPUDefInfoPtr *cpus;
int ncpus;
int ret = -1;
@@ -2724,11 +2777,16 @@ virQEMUCapsProbeQMPCPUDefinitions(virQEMUCapsPtr qemuCaps,
if ((ncpus = qemuMonitorGetCPUDefinitions(mon, &cpus)) < 0)
return -1;
- if (!(qemuCaps->cpuDefinitions = virDomainCapsCPUModelsNew(ncpus)))
+ if (!(models = virDomainCapsCPUModelsNew(ncpus)))
goto cleanup;
+ if (tcg || !virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM))
+ qemuCaps->tcgCPUModels = models;
+ else
+ qemuCaps->kvmCPUModels = models;
+
for (i = 0; i < ncpus; i++) {
- if (virDomainCapsCPUModelsAddSteal(qemuCaps->cpuDefinitions,
+ if (virDomainCapsCPUModelsAddSteal(models,
&cpus[i]->name,
VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
goto cleanup;
@@ -3006,15 +3064,22 @@ virQEMUCapsInitHostCPUModel(virQEMUCapsPtr qemuCaps,
static int
virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
- xmlXPathContextPtr ctxt)
+ xmlXPathContextPtr ctxt,
+ virDomainVirtType type)
{
+ virDomainCapsCPUModelsPtr cpus = NULL;
xmlNodePtr *nodes = NULL;
char *str = NULL;
size_t i;
int n;
int ret = -1;
- if ((n = virXPathNodeSet("./cpu", ctxt, &nodes)) < 0) {
+ if (type == VIR_DOMAIN_VIRT_KVM)
+ n = virXPathNodeSet("./cpu[@type='kvm']", ctxt, &nodes);
+ else
+ n = virXPathNodeSet("./cpu[@type='tcg']", ctxt, &nodes);
+
+ if (n < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("failed to parse qemu capabilities cpus"));
goto cleanup;
@@ -3025,9 +3090,14 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
goto cleanup;
}
- if (!(qemuCaps->cpuDefinitions = virDomainCapsCPUModelsNew(n)))
+ if (!(cpus = virDomainCapsCPUModelsNew(n)))
goto cleanup;
+ if (type == VIR_DOMAIN_VIRT_KVM)
+ qemuCaps->kvmCPUModels = cpus;
+ else
+ qemuCaps->tcgCPUModels = cpus;
+
for (i = 0; i < n; i++) {
if (!(str = virXMLPropString(nodes[i], "name"))) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -3035,8 +3105,7 @@ virQEMUCapsLoadCPUModels(virQEMUCapsPtr qemuCaps,
goto cleanup;
}
- if (virDomainCapsCPUModelsAddSteal(qemuCaps->cpuDefinitions,
- &str,
+ if (virDomainCapsCPUModelsAddSteal(cpus, &str,
VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
goto cleanup;
}
@@ -3178,7 +3247,8 @@ virQEMUCapsLoadCache(virCapsPtr caps,
}
VIR_FREE(str);
- if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt) < 0)
+ if (virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_KVM) < 0 ||
+ virQEMUCapsLoadCPUModels(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0)
goto cleanup;
if ((n = virXPathNodeSet("./machine", ctxt, &nodes)) < 0) {
@@ -3296,15 +3366,27 @@ virQEMUCapsLoadCache(virCapsPtr caps,
static void
virQEMUCapsFormatCPUModels(virQEMUCapsPtr qemuCaps,
- virBufferPtr buf)
+ virBufferPtr buf,
+ virDomainVirtType type)
{
+ virDomainCapsCPUModelsPtr cpus;
+ const char *typeStr;
size_t i;
- if (qemuCaps->cpuDefinitions) {
- for (i = 0; i < qemuCaps->cpuDefinitions->nmodels; i++) {
- virDomainCapsCPUModelPtr cpu = qemuCaps->cpuDefinitions->models + i;
- virBufferEscapeString(buf, "\n", cpu->name);
- }
+ if (type == VIR_DOMAIN_VIRT_KVM) {
+ typeStr = "kvm";
+ cpus = qemuCaps->kvmCPUModels;
+ } else {
+ typeStr = "tcg";
+ cpus = qemuCaps->tcgCPUModels;
+ }
+
+ if (!cpus)
+ return;
+
+ for (i = 0; i < cpus->nmodels; i++) {
+ virBufferAsprintf(buf, "\n", cpus->models[i].name);
}
}
@@ -3351,7 +3433,8 @@ virQEMUCapsFormatCache(virQEMUCapsPtr qemuCaps,
virBufferAsprintf(&buf, "%s\n",
virArchToString(qemuCaps->arch));
- virQEMUCapsFormatCPUModels(qemuCaps, &buf);
+ virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM);
+ virQEMUCapsFormatCPUModels(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU);
for (i = 0; i < qemuCaps->nmachineTypes; i++) {
virBufferEscapeString(&buf, "arch = VIR_ARCH_NONE;
qemuCaps->usedQMP = false;
- virObjectUnref(qemuCaps->cpuDefinitions);
- qemuCaps->cpuDefinitions = NULL;
+ virObjectUnref(qemuCaps->kvmCPUModels);
+ qemuCaps->kvmCPUModels = NULL;
+ virObjectUnref(qemuCaps->tcgCPUModels);
+ qemuCaps->tcgCPUModels = NULL;
for (i = 0; i < qemuCaps->nmachineTypes; i++) {
VIR_FREE(qemuCaps->machineTypes[i].name);
@@ -4029,7 +4114,7 @@ virQEMUCapsInitQMPMonitor(virQEMUCapsPtr qemuCaps,
goto cleanup;
if (virQEMUCapsProbeQMPMachineTypes(qemuCaps, mon) < 0)
goto cleanup;
- if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon) < 0)
+ if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, false) < 0)
goto cleanup;
if (virQEMUCapsProbeQMPTPM(qemuCaps, mon) < 0)
goto cleanup;
@@ -4077,6 +4162,9 @@ virQEMUCapsInitQMPMonitorTCG(virQEMUCapsPtr qemuCaps ATTRIBUTE_UNUSED,
goto cleanup;
}
+ if (virQEMUCapsProbeQMPCPUDefinitions(qemuCaps, mon, true) < 0)
+ goto cleanup;
+
ret = 0;
cleanup:
return ret;
@@ -4869,7 +4957,14 @@ virQEMUCapsFillDomainCPUCaps(virCapsPtr caps,
char **models = NULL;
if (virCPUGetModels(domCaps->arch, &models) >= 0) {
- filtered = virDomainCapsCPUModelsFilter(qemuCaps->cpuDefinitions,
+ virDomainCapsCPUModelsPtr cpus;
+
+ if (domCaps->virttype == VIR_DOMAIN_VIRT_KVM)
+ cpus = qemuCaps->kvmCPUModels;
+ else
+ cpus = qemuCaps->tcgCPUModels;
+
+ filtered = virDomainCapsCPUModelsFilter(cpus,
(const char **) models);
virStringListFree(models);
}
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 4e33ddaf87..6d57ffb7ca 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -431,9 +431,11 @@ unsigned int virQEMUCapsGetVersion(virQEMUCapsPtr qemuCaps);
const char *virQEMUCapsGetPackage(virQEMUCapsPtr qemuCaps);
unsigned int virQEMUCapsGetKVMVersion(virQEMUCapsPtr qemuCaps);
int virQEMUCapsAddCPUDefinitions(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType type,
const char **name,
size_t count);
int virQEMUCapsGetCPUDefinitions(virQEMUCapsPtr qemuCaps,
+ virDomainVirtType type,
char ***names,
size_t *count);
virCPUDefPtr virQEMUCapsGetHostModel(virQEMUCapsPtr qemuCaps);
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ab0c2c8bfa..64a3f95ea4 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -5076,7 +5076,8 @@ qemuProcessUpdateGuestCPU(virDomainDefPtr def,
virQEMUCapsGetHostModel(qemuCaps)) < 0)
goto cleanup;
- if (virQEMUCapsGetCPUDefinitions(qemuCaps, &models, &nmodels) < 0 ||
+ if (virQEMUCapsGetCPUDefinitions(qemuCaps, def->virtType,
+ &models, &nmodels) < 0 ||
virCPUTranslate(def->os.arch, def->cpu,
(const char **) models, nmodels) < 0)
goto cleanup;
diff --git a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
index 4aa475c1e7..67f7ee82a5 100644
--- a/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_1.7.0.x86_64.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-x86_64
- kvm
+ qemu
pc-i440fx-1.7
x86_64
@@ -19,7 +19,7 @@
-
+
Broadwell
diff --git a/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml
index 76aee83ba1..a2702f498a 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0-gicv2-virt.aarch64.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-aarch64
- kvm
+ qemu
virt-2.6
aarch64
@@ -19,7 +19,7 @@
-
+
pxa262
diff --git a/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
index 104c29fabb..a2702f498a 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0-gicv3-virt.aarch64.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-aarch64
- kvm
+ qemu
virt-2.6
aarch64
@@ -19,7 +19,7 @@
-
+
pxa262
@@ -108,7 +108,7 @@
- 3
+ 2
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
index ca511f48d8..d2a2e7bd25 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.aarch64.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-aarch64
- kvm
+ qemu
integratorcp
aarch64
@@ -19,7 +19,7 @@
-
+
pxa262
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
index a75764c071..f6a98f7e03 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.ppc64le.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-ppc64
- kvm
+ qemu
pseries-2.6
ppc64le
@@ -19,7 +19,7 @@
-
+
POWER8
diff --git a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
index a8975e8e53..33c6eda78e 100644
--- a/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
+++ b/tests/domaincapsschemadata/qemu_2.6.0.x86_64.xml
@@ -1,6 +1,6 @@
/usr/bin/qemu-system-x86_64
- kvm
+ qemu
pc-i440fx-2.6
x86_64
@@ -19,7 +19,7 @@
-
+
Broadwell
diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c
index e70fa05b68..74a16ce864 100644
--- a/tests/domaincapstest.c
+++ b/tests/domaincapstest.c
@@ -413,27 +413,27 @@ mymain(void)
DO_TEST_QEMU("1.7.0", "caps_1.7.0",
"/usr/bin/qemu-system-x86_64", NULL,
- "x86_64", VIR_DOMAIN_VIRT_KVM);
+ "x86_64", VIR_DOMAIN_VIRT_QEMU);
DO_TEST_QEMU("2.6.0", "caps_2.6.0",
"/usr/bin/qemu-system-x86_64", NULL,
- "x86_64", VIR_DOMAIN_VIRT_KVM);
+ "x86_64", VIR_DOMAIN_VIRT_QEMU);
DO_TEST_QEMU("2.6.0", "caps_2.6.0-gicv2",
"/usr/bin/qemu-system-aarch64", NULL,
- "aarch64", VIR_DOMAIN_VIRT_KVM);
+ "aarch64", VIR_DOMAIN_VIRT_QEMU);
DO_TEST_QEMU("2.6.0-gicv2", "caps_2.6.0-gicv2",
"/usr/bin/qemu-system-aarch64", "virt",
- "aarch64", VIR_DOMAIN_VIRT_KVM);
+ "aarch64", VIR_DOMAIN_VIRT_QEMU);
DO_TEST_QEMU("2.6.0-gicv3", "caps_2.6.0-gicv3",
"/usr/bin/qemu-system-aarch64", "virt",
- "aarch64", VIR_DOMAIN_VIRT_KVM);
+ "aarch64", VIR_DOMAIN_VIRT_QEMU);
DO_TEST_QEMU("2.6.0", "caps_2.6.0",
"/usr/bin/qemu-system-ppc64", NULL,
- "ppc64le", VIR_DOMAIN_VIRT_KVM);
+ "ppc64le", VIR_DOMAIN_VIRT_QEMU);
#endif /* WITH_QEMU */
diff --git a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
index 0d792beced..fd44d3378e 100644
--- a/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml
@@ -114,28 +114,28 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
index 97b985851d..4a184c4c16 100644
--- a/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml
@@ -132,30 +132,30 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
index 60dea6f084..14b0a934b1 100644
--- a/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml
@@ -133,30 +133,30 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
index 2931418790..3432f80d93 100644
--- a/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
@@ -144,30 +144,30 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
index 15f2075e5b..63bfafcb43 100644
--- a/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
@@ -149,30 +149,30 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
index 0726443a8e..3614bbba04 100644
--- a/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
@@ -151,30 +151,30 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
index 498e2d089e..1df4307dde 100644
--- a/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
@@ -166,31 +166,31 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
index 18594e68c2..4774a867b7 100644
--- a/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
@@ -186,34 +186,34 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
index 033894a4bb..66b9b9fd8e 100644
--- a/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
@@ -192,34 +192,34 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
index 24fb5843fe..866c307b41 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv2.aarch64.xml
@@ -167,36 +167,36 @@
0
aarch64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
index ecfe07ede3..8657dcac62 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.6.0-gicv3.aarch64.xml
@@ -167,36 +167,36 @@
0
aarch64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
index 5fbc9af7b0..a8fd9b6a53 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
+++ b/tests/qemucapabilitiesdata/caps_2.6.0.ppc64le.xml
@@ -164,436 +164,436 @@
0
ppc64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
index 2525d2d95d..ae69ef68f4 100644
--- a/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
@@ -201,34 +201,34 @@
0
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
index f2a305fce1..d5c1fb3fc4 100644
--- a/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
+++ b/tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
@@ -203,35 +203,35 @@
0
(v2.7.0)
x86_64
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index e0ef47f09e..8f37ee5375 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -302,20 +302,31 @@ testAddCPUModels(virQEMUCapsPtr caps, bool skipLegacy)
};
if (ARCH_IS_X86(arch)) {
- if (virQEMUCapsAddCPUDefinitions(caps, x86Models,
+ if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, x86Models,
+ ARRAY_CARDINALITY(x86Models)) < 0 ||
+ virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, x86Models,
ARRAY_CARDINALITY(x86Models)) < 0)
return -1;
- if (!skipLegacy &&
- virQEMUCapsAddCPUDefinitions(caps, x86LegacyModels,
- ARRAY_CARDINALITY(x86LegacyModels)) < 0)
- return -1;
+ if (!skipLegacy) {
+ if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM,
+ x86LegacyModels,
+ ARRAY_CARDINALITY(x86LegacyModels)) < 0 ||
+ virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU,
+ x86LegacyModels,
+ ARRAY_CARDINALITY(x86LegacyModels)) < 0)
+ return -1;
+ }
} else if (ARCH_IS_ARM(arch)) {
- if (virQEMUCapsAddCPUDefinitions(caps, armModels,
+ if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, armModels,
+ ARRAY_CARDINALITY(armModels)) < 0 ||
+ virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, armModels,
ARRAY_CARDINALITY(armModels)) < 0)
return -1;
} else if (ARCH_IS_PPC64(arch)) {
- if (virQEMUCapsAddCPUDefinitions(caps, ppc64Models,
+ if (virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_KVM, ppc64Models,
+ ARRAY_CARDINALITY(ppc64Models)) < 0 ||
+ virQEMUCapsAddCPUDefinitions(caps, VIR_DOMAIN_VIRT_QEMU, ppc64Models,
ARRAY_CARDINALITY(ppc64Models)) < 0)
return -1;
}