mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
qemu: Refactor CPU features check
The checks are now in a dedicated qemuProcessVerifyCPUFeatures function. Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
parent
d5f47d7d75
commit
af1ca85545
@ -3809,6 +3809,36 @@ qemuProcessVerifyKVMFeatures(virDomainDefPtr def,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuProcessVerifyCPUFeatures(virDomainDefPtr def,
|
||||||
|
virCPUDataPtr cpu)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (!def->cpu ||
|
||||||
|
(def->cpu->mode == VIR_CPU_MODE_CUSTOM &&
|
||||||
|
!def->cpu->model))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
rc = virCPUCheckFeature(def->os.arch, def->cpu, "invtsc");
|
||||||
|
|
||||||
|
if (rc < 0) {
|
||||||
|
return -1;
|
||||||
|
} else if (rc == 1) {
|
||||||
|
rc = virCPUDataCheckFeature(cpu, "invtsc");
|
||||||
|
if (rc <= 0) {
|
||||||
|
if (rc == 0) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("host doesn't support invariant TSC"));
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
|
qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
|
||||||
virDomainObjPtr vm,
|
virDomainObjPtr vm,
|
||||||
@ -3820,7 +3850,6 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
|
|||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||||
int rc;
|
int rc;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
size_t i;
|
|
||||||
|
|
||||||
switch (arch) {
|
switch (arch) {
|
||||||
case VIR_ARCH_I686:
|
case VIR_ARCH_I686:
|
||||||
@ -3842,21 +3871,8 @@ qemuProcessVerifyGuestCPU(virQEMUDriverPtr driver,
|
|||||||
qemuProcessVerifyHypervFeatures(def, guestcpu) < 0)
|
qemuProcessVerifyHypervFeatures(def, guestcpu) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (def->cpu) {
|
if (qemuProcessVerifyCPUFeatures(def, guestcpu) < 0)
|
||||||
for (i = 0; i < def->cpu->nfeatures; i++) {
|
|
||||||
virCPUFeatureDefPtr feature = &def->cpu->features[i];
|
|
||||||
|
|
||||||
if (feature->policy != VIR_CPU_FEATURE_REQUIRE)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (STREQ(feature->name, "invtsc") &&
|
|
||||||
!virCPUDataCheckFeature(guestcpu, feature->name)) {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
_("host doesn't support invariant TSC"));
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user