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();
if (kvmSupportsNesting != qemuCaps->kvmSupportsNesting) {
VIR_DEBUG("Outdated capabilities for '%s': kvm kernel nested "
gid_t runGid,
const char *hostCPUSignature,
unsigned int microcodeVersion,
- const char *kernelVersion)
+ const char *kernelVersion,
+ virCPUData* cpuData)
{
g_autoptr(virQEMUCaps) qemuCaps = NULL;
struct stat sb;
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) {
qemuCaps->hostCPUSignature = g_strdup(hostCPUSignature);
qemuCaps->microcodeVersion = microcodeVersion;
- qemuCaps->cpuData = NULL;
+ qemuCaps->cpuData = virCPUDataNewCopy(cpuData);
qemuCaps->kernelVersion = g_strdup(kernelVersion);
priv->runGid,
priv->hostCPUSignature,
virHostCPUGetMicrocodeVersion(priv->hostArch),
- priv->kernelVersion);
+ priv->kernelVersion,
+ priv->cpuData);
}
gid_t runGid,
const char *hostCPUSignature,
unsigned int microcodeVersion,
- const char *kernelVersion);
+ const char *kernelVersion,
+ virCPUData* cpuData);
int virQEMUCapsLoadCache(virArch hostArch,
virQEMUCaps *qemuCaps,
return EXIT_FAILURE;
if (!(caps = virQEMUCapsNewForBinaryInternal(VIR_ARCH_NONE, argv[1], "/tmp",
- -1, -1, NULL, 0, NULL)))
+ -1, -1, NULL, 0, NULL, NULL)))
return EXIT_FAILURE;
host = virArchFromHost();