The API is no longer used anywhere else since it was replaced by a much saner work flow utilizing new APIs that work on virCPUDefPtr directly: virCPUCompare, virCPUUpdate, and virCPUTranslate. Not testing the new work flow caused some bugs to be hidden. This patch reveals them, but doesn't attempt to fix them. To make sure all test still pass after this patch, all affected test results are modified to pretend the tests succeeded. All of the bugs will be fixed in the following commits and the artificial modifications will be reverted. The following is the list of bugs in the new CPU model work flow: - a guest CPU with mode='custom' and missing <vendor/> gets the vendor copied from host's CPU (the vendor should only be copied to host-model CPUs): DO_TEST_UPDATE("x86", "host", "min", VIR_CPU_COMPARE_IDENTICAL) DO_TEST_UPDATE("x86", "host", "pentium3", VIR_CPU_COMPARE_IDENTICAL) DO_TEST_GUESTCPU("x86", "host-better", "pentium3", NULL, 0) - when a guest CPU with mode='custom' needs to be translated into another model because the original model is not supported by a hypervisor, the result will have its vendor set to the vendor of the original CPU model as specified in cpu_map.xml even if the original guest CPU XML didn't contain <vendor/>: DO_TEST_GUESTCPU("x86", "host", "guest", model486, 0) DO_TEST_GUESTCPU("x86", "host", "guest", models, 0) DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0) - legacy POWERx_v* model names are not recognized: DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy", ppc_models, 0) Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> --- tests/cputest.c | 65 +++++++++------------- .../ppc64-host+guest,ppc_models-result.xml | 2 - .../ppc64-host+guest-legacy,ppc_models-result.xml | 2 - .../cputestdata/x86-host+guest,model486-result.xml | 17 ++++-- tests/cputestdata/x86-host+guest,models-result.xml | 17 ++++-- tests/cputestdata/x86-host+guest-result.xml | 18 ++++-- .../x86-host+host+host-model,models-result.xml | 3 +- tests/cputestdata/x86-host+penryn-force-result.xml | 5 +- .../x86-host+strict-force-extra-result.xml | 31 +++++------ ...6-host-Haswell-noTSX+Haswell,haswell-result.xml | 4 +- ...-Haswell-noTSX+Haswell-noTSX,haswell-result.xml | 3 +- ...x86-host-Haswell-noTSX+Haswell-noTSX-result.xml | 2 +- .../x86-host-better+pentium3-result.xml | 28 +++++----- tests/cputestdata/x86-host-worse+guest-result.xml | 18 ++++-- 14 files changed, 113 insertions(+), 102 deletions(-) diff --git a/tests/cputest.c b/tests/cputest.c index 6aebfb0..1d7f6bc 100644 --- a/tests/cputest.c +++ b/tests/cputest.c @@ -237,14 +237,12 @@ cpuTestCompare(const void *arg) static int -cpuTestGuestData(const void *arg) +cpuTestGuestCPU(const void *arg) { const struct data *data = arg; int ret = -2; virCPUDefPtr host = NULL; virCPUDefPtr cpu = NULL; - virCPUDefPtr guest = NULL; - virCPUDataPtr guestData = NULL; virCPUCompareResult cmpResult; virBuffer buf = VIR_BUFFER_INITIALIZER; char *result = NULL; @@ -253,22 +251,15 @@ cpuTestGuestData(const void *arg) !(cpu = cpuTestLoadXML(data->arch, data->name))) goto cleanup; - cmpResult = cpuGuestData(host, cpu, &guestData, NULL); + cmpResult = virCPUCompare(host->arch, host, cpu, false); if (cmpResult == VIR_CPU_COMPARE_ERROR || cmpResult == VIR_CPU_COMPARE_INCOMPATIBLE) { ret = -1; goto cleanup; } - if (VIR_ALLOC(guest) < 0) - goto cleanup; - - guest->arch = host->arch; - guest->type = VIR_CPU_TYPE_GUEST; - guest->match = VIR_CPU_MATCH_EXACT; - guest->fallback = cpu->fallback; - if (cpuDecode(guest, guestData, data->models, - data->nmodels, NULL) < 0) { + if (virCPUUpdate(host->arch, cpu, host) < 0 || + virCPUTranslate(host->arch, cpu, data->models, data->nmodels) < 0) { ret = -1; goto cleanup; } @@ -284,17 +275,15 @@ cpuTestGuestData(const void *arg) } result = virBufferContentAndReset(&buf); - if (cpuTestCompareXML(data->arch, guest, result, false) < 0) + if (cpuTestCompareXML(data->arch, cpu, result, false) < 0) goto cleanup; ret = 0; cleanup: VIR_FREE(result); - cpuDataFree(guestData); virCPUDefFree(host); virCPUDefFree(cpu); - virCPUDefFree(guest); if (ret == data->result) { /* We got the result we expected, whether it was @@ -656,8 +645,8 @@ mymain(void) host "/" feature " (" #result ")", \ host, feature, NULL, 0, 0, result) -#define DO_TEST_GUESTDATA(arch, host, cpu, models, result) \ - DO_TEST(arch, cpuTestGuestData, \ +#define DO_TEST_GUESTCPU(arch, host, cpu, models, result) \ + DO_TEST(arch, cpuTestGuestCPU, \ host "/" cpu " (" #models ")", \ host, cpu, models, \ models == NULL ? 0 : sizeof(models) / sizeof(char *), \ @@ -787,27 +776,27 @@ mymain(void) DO_TEST_HASFEATURE("x86", "host", "foo", FAIL); /* computing guest data and decoding the data into a guest CPU XML */ - DO_TEST_GUESTDATA("x86", "host", "guest", NULL, 0); - DO_TEST_GUESTDATA("x86", "host-better", "pentium3", NULL, 0); - DO_TEST_GUESTDATA("x86", "host-worse", "guest", NULL, 0); - DO_TEST_GUESTDATA("x86", "host", "strict-force-extra", NULL, 0); - DO_TEST_GUESTDATA("x86", "host", "penryn-force", NULL, 0); - DO_TEST_GUESTDATA("x86", "host", "guest", model486, 0); - DO_TEST_GUESTDATA("x86", "host", "guest", models, 0); - DO_TEST_GUESTDATA("x86", "host", "guest", nomodel, -1); - DO_TEST_GUESTDATA("x86", "host", "guest-nofallback", models, /*-1*/ -2); - DO_TEST_GUESTDATA("x86", "host", "host+host-model", models, 0); - DO_TEST_GUESTDATA("x86", "host", "host+host-model-nofallback", models, /*-1*/ -2); - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell", haswell, 0); - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, /*-1*/ -2); - DO_TEST_GUESTDATA("x86", "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); + DO_TEST_GUESTCPU("x86", "host", "guest", NULL, 0); + DO_TEST_GUESTCPU("x86", "host-better", "pentium3", NULL, 0); + DO_TEST_GUESTCPU("x86", "host-worse", "guest", NULL, 0); + DO_TEST_GUESTCPU("x86", "host", "strict-force-extra", NULL, 0); + DO_TEST_GUESTCPU("x86", "host", "penryn-force", NULL, 0); + DO_TEST_GUESTCPU("x86", "host", "guest", model486, 0); + DO_TEST_GUESTCPU("x86", "host", "guest", models, 0); + DO_TEST_GUESTCPU("x86", "host", "guest", nomodel, -1); + DO_TEST_GUESTCPU("x86", "host", "guest-nofallback", models, -1); + DO_TEST_GUESTCPU("x86", "host", "host+host-model", models, 0); + DO_TEST_GUESTCPU("x86", "host", "host+host-model-nofallback", models, -1); + DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell", haswell, 0); + DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX", haswell, 0); + DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX-nofallback", haswell, -1); + DO_TEST_GUESTCPU("x86", "host-Haswell-noTSX", "Haswell-noTSX", NULL, 0); - DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, 0); - DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, -1); - DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy", ppc_models, 0); - DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy-incompatible", ppc_models, -1); - DO_TEST_GUESTDATA("ppc64", "host", "guest-legacy-invalid", ppc_models, -1); + DO_TEST_GUESTCPU("ppc64", "host", "guest", ppc_models, 0); + DO_TEST_GUESTCPU("ppc64", "host", "guest-nofallback", ppc_models, -1); + DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy", ppc_models, /*0*/ -1); + DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-incompatible", ppc_models, -1); + DO_TEST_GUESTCPU("ppc64", "host", "guest-legacy-invalid", ppc_models, -1); DO_TEST_CPUID("x86", "A10-5800K", true); DO_TEST_CPUID("x86", "Atom-D510", false); diff --git a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml index 3548c0e..7fac4b7 100644 --- a/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml +++ b/tests/cputestdata/ppc64-host+guest,ppc_models-result.xml @@ -1,5 +1,3 @@ <cpu mode='custom' match='exact'> - <arch>ppc64</arch> <model fallback='allow'>POWER7</model> - <vendor>IBM</vendor> </cpu> diff --git a/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml b/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml index 3548c0e..7fac4b7 100644 --- a/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml +++ b/tests/cputestdata/ppc64-host+guest-legacy,ppc_models-result.xml @@ -1,5 +1,3 @@ <cpu mode='custom' match='exact'> - <arch>ppc64</arch> <model fallback='allow'>POWER7</model> - <vendor>IBM</vendor> </cpu> diff --git a/tests/cputestdata/x86-host+guest,model486-result.xml b/tests/cputestdata/x86-host+guest,model486-result.xml index 8bd425d..88df467 100644 --- a/tests/cputestdata/x86-host+guest,model486-result.xml +++ b/tests/cputestdata/x86-host+guest,model486-result.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>486</model> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> <feature policy='require' name='de'/> <feature policy='require' name='tsc'/> <feature policy='require' name='msr'/> @@ -19,9 +20,9 @@ <feature policy='require' name='mmx'/> <feature policy='require' name='fxsr'/> <feature policy='require' name='sse2'/> - <feature policy='require' name='pbe'/> + <feature policy='force' name='pbe'/> <feature policy='require' name='pni'/> - <feature policy='require' name='monitor'/> + <feature policy='force' name='monitor'/> <feature policy='require' name='ssse3'/> <feature policy='require' name='cx16'/> <feature policy='require' name='xtpr'/> @@ -30,8 +31,14 @@ <feature policy='require' name='syscall'/> <feature policy='require' name='nx'/> <feature policy='require' name='lm'/> - <feature policy='require' name='3dnowext'/> + <feature policy='force' name='3dnowext'/> <feature policy='require' name='lahf_lm'/> - <feature policy='require' name='svm'/> + <feature policy='force' name='svm'/> <feature policy='disable' name='vme'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='3dnow'/> + <feature policy='disable' name='vmx'/> + <feature policy='disable' name='ds_cpl'/> + <feature policy='disable' name='sse'/> + <feature policy='forbid' name='popcnt'/> </cpu> diff --git a/tests/cputestdata/x86-host+guest,models-result.xml b/tests/cputestdata/x86-host+guest,models-result.xml index 6cd0668..e7a77c2 100644 --- a/tests/cputestdata/x86-host+guest,models-result.xml +++ b/tests/cputestdata/x86-host+guest,models-result.xml @@ -1,13 +1,18 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Nehalem</model> - <feature policy='require' name='pbe'/> - <feature policy='require' name='monitor'/> + <vendor>Intel</vendor> + <topology sockets='2' cores='4' threads='1'/> + <feature policy='force' name='pbe'/> + <feature policy='force' name='monitor'/> <feature policy='require' name='xtpr'/> <feature policy='require' name='dca'/> - <feature policy='require' name='3dnowext'/> - <feature policy='require' name='svm'/> + <feature policy='force' name='3dnowext'/> + <feature policy='force' name='svm'/> <feature policy='disable' name='sse'/> <feature policy='disable' name='sse4.2'/> - <feature policy='disable' name='popcnt'/> + <feature policy='forbid' name='popcnt'/> + <feature policy='disable' name='3dnow'/> + <feature policy='require' name='ssse3'/> + <feature policy='disable' name='vmx'/> + <feature policy='disable' name='ds_cpl'/> </cpu> diff --git a/tests/cputestdata/x86-host+guest-result.xml b/tests/cputestdata/x86-host+guest-result.xml index 6082b7b..137a3d6 100644 --- a/tests/cputestdata/x86-host+guest-result.xml +++ b/tests/cputestdata/x86-host+guest-result.xml @@ -1,11 +1,17 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Penryn</model> - <feature policy='require' name='pbe'/> - <feature policy='require' name='monitor'/> - <feature policy='require' name='xtpr'/> + <topology sockets='2' cores='4' threads='1'/> <feature policy='require' name='dca'/> - <feature policy='require' name='3dnowext'/> - <feature policy='require' name='svm'/> + <feature policy='require' name='xtpr'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='3dnow'/> + <feature policy='require' name='ssse3'/> + <feature policy='disable' name='vmx'/> + <feature policy='disable' name='ds_cpl'/> <feature policy='disable' name='sse'/> + <feature policy='force' name='monitor'/> + <feature policy='force' name='pbe'/> + <feature policy='force' name='3dnowext'/> + <feature policy='force' name='svm'/> + <feature policy='forbid' name='popcnt'/> </cpu> diff --git a/tests/cputestdata/x86-host+host+host-model,models-result.xml b/tests/cputestdata/x86-host+host+host-model,models-result.xml index 63d5e90..4be4701 100644 --- a/tests/cputestdata/x86-host+host+host-model,models-result.xml +++ b/tests/cputestdata/x86-host+host+host-model,models-result.xml @@ -1,5 +1,4 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>core2duo</model> <vendor>Intel</vendor> <feature policy='require' name='ds'/> @@ -17,4 +16,6 @@ <feature policy='require' name='dca'/> <feature policy='require' name='sse4.1'/> <feature policy='require' name='lahf_lm'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='vme'/> </cpu> diff --git a/tests/cputestdata/x86-host+penryn-force-result.xml b/tests/cputestdata/x86-host+penryn-force-result.xml index ef0a2c0..bb624c0 100644 --- a/tests/cputestdata/x86-host+penryn-force-result.xml +++ b/tests/cputestdata/x86-host+penryn-force-result.xml @@ -1,6 +1,5 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Penryn</model> - <feature policy='require' name='sse4.2'/> - <feature policy='require' name='popcnt'/> + <feature policy='force' name='popcnt'/> + <feature policy='force' name='sse4.2'/> </cpu> diff --git a/tests/cputestdata/x86-host+strict-force-extra-result.xml b/tests/cputestdata/x86-host+strict-force-extra-result.xml index 958d458..74b3327 100644 --- a/tests/cputestdata/x86-host+strict-force-extra-result.xml +++ b/tests/cputestdata/x86-host+strict-force-extra-result.xml @@ -1,19 +1,18 @@ -<cpu mode='custom' match='exact'> - <arch>x86_64</arch> +<cpu mode='custom' match='strict'> <model fallback='allow'>Penryn</model> - <feature policy='require' name='vme'/> - <feature policy='require' name='ds'/> - <feature policy='require' name='acpi'/> - <feature policy='require' name='ss'/> - <feature policy='require' name='ht'/> - <feature policy='require' name='tm'/> - <feature policy='require' name='pbe'/> - <feature policy='require' name='monitor'/> - <feature policy='require' name='ds_cpl'/> - <feature policy='require' name='vmx'/> - <feature policy='require' name='est'/> - <feature policy='require' name='tm2'/> - <feature policy='require' name='xtpr'/> <feature policy='require' name='dca'/> - <feature policy='require' name='3dnow'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='vme'/> + <feature policy='force' name='3dnow'/> </cpu> diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml index dfdca13..2dbe06c 100644 --- a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml +++ b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell,haswell-result.xml @@ -1,6 +1,6 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Haswell</model> - <feature policy='disable' name='hle'/> + <topology sockets='1' cores='2' threads='2'/> <feature policy='disable' name='rtm'/> + <feature policy='disable' name='hle'/> </cpu> diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml index dfdca13..5902f6c 100644 --- a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml +++ b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX,haswell-result.xml @@ -1,6 +1,7 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Haswell</model> + <vendor>Intel</vendor> + <topology sockets='1' cores='2' threads='2'/> <feature policy='disable' name='hle'/> <feature policy='disable' name='rtm'/> </cpu> diff --git a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml index f5a67fb..3b74089 100644 --- a/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml +++ b/tests/cputestdata/x86-host-Haswell-noTSX+Haswell-noTSX-result.xml @@ -1,4 +1,4 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Haswell-noTSX</model> + <topology sockets='1' cores='2' threads='2'/> </cpu> diff --git a/tests/cputestdata/x86-host-better+pentium3-result.xml b/tests/cputestdata/x86-host-better+pentium3-result.xml index a37b368..12336da 100644 --- a/tests/cputestdata/x86-host-better+pentium3-result.xml +++ b/tests/cputestdata/x86-host-better+pentium3-result.xml @@ -1,18 +1,18 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Nehalem</model> - <feature policy='require' name='vme'/> - <feature policy='require' name='ds'/> - <feature policy='require' name='acpi'/> - <feature policy='require' name='ss'/> - <feature policy='require' name='ht'/> - <feature policy='require' name='tm'/> - <feature policy='require' name='pbe'/> - <feature policy='require' name='monitor'/> - <feature policy='require' name='ds_cpl'/> - <feature policy='require' name='vmx'/> - <feature policy='require' name='est'/> - <feature policy='require' name='tm2'/> - <feature policy='require' name='xtpr'/> + <vendor>Intel</vendor> <feature policy='require' name='dca'/> + <feature policy='require' name='xtpr'/> + <feature policy='require' name='tm2'/> + <feature policy='require' name='est'/> + <feature policy='require' name='vmx'/> + <feature policy='require' name='ds_cpl'/> + <feature policy='require' name='monitor'/> + <feature policy='require' name='pbe'/> + <feature policy='require' name='tm'/> + <feature policy='require' name='ht'/> + <feature policy='require' name='ss'/> + <feature policy='require' name='acpi'/> + <feature policy='require' name='ds'/> + <feature policy='require' name='vme'/> </cpu> diff --git a/tests/cputestdata/x86-host-worse+guest-result.xml b/tests/cputestdata/x86-host-worse+guest-result.xml index 6b9c74a..2edc875 100644 --- a/tests/cputestdata/x86-host-worse+guest-result.xml +++ b/tests/cputestdata/x86-host-worse+guest-result.xml @@ -1,9 +1,17 @@ <cpu mode='custom' match='exact'> - <arch>x86_64</arch> <model fallback='allow'>Penryn</model> - <feature policy='require' name='pbe'/> - <feature policy='require' name='monitor'/> - <feature policy='require' name='3dnowext'/> - <feature policy='require' name='svm'/> + <topology sockets='2' cores='4' threads='1'/> + <feature policy='disable' name='dca'/> + <feature policy='disable' name='xtpr'/> + <feature policy='disable' name='sse4.2'/> + <feature policy='disable' name='3dnow'/> + <feature policy='require' name='ssse3'/> + <feature policy='disable' name='vmx'/> + <feature policy='disable' name='ds_cpl'/> <feature policy='disable' name='sse'/> + <feature policy='force' name='monitor'/> + <feature policy='force' name='pbe'/> + <feature policy='force' name='3dnowext'/> + <feature policy='force' name='svm'/> + <feature policy='forbid' name='popcnt'/> </cpu> -- 2.10.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list