mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 01:34:11 +03:00
qemu: Forbid MSR features with old QEMU
Without "unavailable-features" CPU property we cannot properly detect whether a specific MSR feature we asked for (either explicitly or implicitly via a CPU model) was disabled by QEMU for some reason. Because this could break migration, snapshots, and save/restore operaions, it's better to just forbid any use of MSR features with QEMU which lacks "unavailable-features" CPU property. Signed-off-by: Jiri Denemark <jdenemar@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
c8ec678fd9
commit
8eb4a89f5f
@ -59,6 +59,7 @@
|
||||
#include "qemu_firmware.h"
|
||||
|
||||
#include "cpu/cpu.h"
|
||||
#include "cpu/cpu_x86.h"
|
||||
#include "datatypes.h"
|
||||
#include "virlog.h"
|
||||
#include "virerror.h"
|
||||
@ -5406,9 +5407,32 @@ qemuProcessStartValidate(virQEMUDriverPtr driver,
|
||||
if (qemuProcessStartValidateShmem(vm) < 0)
|
||||
return -1;
|
||||
|
||||
if (vm->def->cpu &&
|
||||
virCPUValidateFeatures(vm->def->os.arch, vm->def->cpu) < 0)
|
||||
return -1;
|
||||
if (vm->def->cpu) {
|
||||
if (virCPUValidateFeatures(vm->def->os.arch, vm->def->cpu) < 0)
|
||||
return -1;
|
||||
|
||||
if (ARCH_IS_X86(vm->def->os.arch) &&
|
||||
!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_UNAVAILABLE_FEATURES)) {
|
||||
VIR_AUTOSTRINGLIST features = NULL;
|
||||
int n;
|
||||
|
||||
if ((n = virCPUDefCheckFeatures(vm->def->cpu,
|
||||
virCPUx86FeatureFilterSelectMSR,
|
||||
NULL,
|
||||
&features)) < 0)
|
||||
return -1;
|
||||
|
||||
if (n > 0) {
|
||||
VIR_AUTOFREE(char *) str = NULL;
|
||||
|
||||
str = virStringListJoin((const char **)features, ", ");
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("Some features cannot be reliably used "
|
||||
"with this QEMU: %s"), str);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (qemuProcessStartValidateDisks(vm, qemuCaps) < 0)
|
||||
return -1;
|
||||
|
Loading…
Reference in New Issue
Block a user