cpu: CPU model names have to match on ppc64

Limitations of the POWER architecture mean that you can't run
eg. a POWER7 guest on a POWER8 host when using KVM. This applies
to all guests, not just those using VIR_CPU_MATCH_STRICT in the
CPU definition; in fact, exact and strict CPU matching are
basically the same on ppc64.

This means, of course, that hosts using different CPUs have to be
considered incompatible as well.

Change ppc64Compute(), called by cpuGuestData(), to reflect this
fact and update test cases accordingly.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1250977
This commit is contained in:
Andrea Bolognani 2015-08-07 17:39:10 +02:00
parent 8382136d42
commit 96b2c7459c
5 changed files with 5 additions and 13 deletions

View File

@ -350,7 +350,6 @@ ppc64Compute(virCPUDefPtr host,
const virCPUDef *cpu,
virCPUDataPtr *guestData,
char **message)
{
struct ppc64_map *map = NULL;
struct ppc64_model *host_model = NULL;
@ -407,9 +406,7 @@ ppc64Compute(virCPUDefPtr host,
!(guest_model = ppc64ModelFromCPU(cpu, map)))
goto cleanup;
if (cpu->type == VIR_CPU_TYPE_GUEST &&
cpu->match == VIR_CPU_MATCH_STRICT &&
STRNEQ(guest_model->name, host_model->name)) {
if (STRNEQ(guest_model->name, host_model->name)) {
VIR_DEBUG("host CPU model does not match required CPU model %s",
guest_model->name);
if (message &&

View File

@ -501,7 +501,7 @@ static const char *model486[] = { "486" };
static const char *nomodel[] = { "nomodel" };
static const char *models[] = { "qemu64", "core2duo", "Nehalem" };
static const char *haswell[] = { "SandyBridge", "Haswell" };
static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER8_v1.0"};
static const char *ppc_models[] = { "POWER7", "POWER7_v2.1", "POWER7_v2.3", "POWER8_v1.0"};
static int
mymain(void)
@ -662,7 +662,7 @@ mymain(void)
NULL, "Haswell-noTSX", 0);
DO_TEST_GUESTDATA("ppc64", "host", "guest", ppc_models, NULL, 0);
DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", 0);
DO_TEST_GUESTDATA("ppc64", "host", "guest-nofallback", ppc_models, "POWER7_v2.1", -1);
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}

View File

@ -1,4 +1,4 @@
<cpu match='exact'>
<model>POWER8_v1.0</model>
<model>POWER7_v2.3</model>
<topology sockets='2' cores='4' threads='1'/>
</cpu>

View File

@ -1,5 +1,5 @@
<cpu mode='custom' match='exact'>
<arch>ppc64</arch>
<model fallback='allow'>POWER8_v1.0</model>
<model fallback='allow'>POWER7_v2.3</model>
<vendor>IBM</vendor>
</cpu>

View File

@ -1,5 +0,0 @@
<cpu mode='custom' match='exact'>
<arch>ppc64</arch>
<model fallback='forbid'>POWER7_v2.1</model>
<vendor>IBM</vendor>
</cpu>