mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
qemu: Invalidate capabilities cache on host cpuid mismatch
See https://bugzilla.redhat.com/show_bug.cgi?id=1953389. Signed-off-by: Tim Wiederhake <twiederh@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
f3f67d4ecd
commit
3bc6f46d30
@ -4907,6 +4907,13 @@ virQEMUCapsIsValid(void *data,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (virCPUDataIsIdentical(priv->cpuData, qemuCaps->cpuData) !=
|
||||||
|
VIR_CPU_COMPARE_IDENTICAL) {
|
||||||
|
VIR_DEBUG("Outdated capabilities for '%s': host cpuid changed",
|
||||||
|
qemuCaps->binary);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
|
kvmSupportsNesting = virQEMUCapsKVMSupportsNesting();
|
||||||
if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
|
if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
|
||||||
VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested "
|
VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested "
|
||||||
@ -5387,7 +5394,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|||||||
gid_t runGid,
|
gid_t runGid,
|
||||||
const char *hostCPUSignature,
|
const char *hostCPUSignature,
|
||||||
unsigned int microcodeVersion,
|
unsigned int microcodeVersion,
|
||||||
const char *kernelVersion)
|
const char *kernelVersion,
|
||||||
|
virCPUData* cpuData)
|
||||||
{
|
{
|
||||||
g_autoptr(virQEMUCaps) qemuCaps = NULL;
|
g_autoptr(virQEMUCaps) qemuCaps = NULL;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
@ -5435,7 +5443,7 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|||||||
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
|
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
|
||||||
qemuCaps->hostCPUSignature = g_strdup(hostCPUSignature);
|
qemuCaps->hostCPUSignature = g_strdup(hostCPUSignature);
|
||||||
qemuCaps->microcodeVersion = microcodeVersion;
|
qemuCaps->microcodeVersion = microcodeVersion;
|
||||||
qemuCaps->cpuData = NULL;
|
qemuCaps->cpuData = virCPUDataNewCopy(cpuData);
|
||||||
|
|
||||||
qemuCaps->kernelVersion = g_strdup(kernelVersion);
|
qemuCaps->kernelVersion = g_strdup(kernelVersion);
|
||||||
|
|
||||||
@ -5460,7 +5468,8 @@ virQEMUCapsNewData(const char *binary,
|
|||||||
priv->runGid,
|
priv->runGid,
|
||||||
priv->hostCPUSignature,
|
priv->hostCPUSignature,
|
||||||
virHostCPUGetMicrocodeVersion(priv->hostArch),
|
virHostCPUGetMicrocodeVersion(priv->hostArch),
|
||||||
priv->kernelVersion);
|
priv->kernelVersion,
|
||||||
|
priv->cpuData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +35,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
|
|||||||
gid_t runGid,
|
gid_t runGid,
|
||||||
const char *hostCPUSignature,
|
const char *hostCPUSignature,
|
||||||
unsigned int microcodeVersion,
|
unsigned int microcodeVersion,
|
||||||
const char *kernelVersion);
|
const char *kernelVersion,
|
||||||
|
virCPUData* cpuData);
|
||||||
|
|
||||||
int virQEMUCapsLoadCache(virArch hostArch,
|
int virQEMUCapsLoadCache(virArch hostArch,
|
||||||
virQEMUCaps *qemuCaps,
|
virQEMUCaps *qemuCaps,
|
||||||
|
@ -79,7 +79,7 @@ main(int argc, char **argv)
|
|||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
if (!(caps = virQEMUCapsNewForBinaryInternal(VIR_ARCH_NONE, argv[1], "/tmp",
|
if (!(caps = virQEMUCapsNewForBinaryInternal(VIR_ARCH_NONE, argv[1], "/tmp",
|
||||||
-1, -1, NULL, 0, NULL)))
|
-1, -1, NULL, 0, NULL, NULL)))
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
|
|
||||||
host = virArchFromHost();
|
host = virArchFromHost();
|
||||||
|
Loading…
Reference in New Issue
Block a user