diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 2223589058..cc6d9bbd44 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -612,6 +612,7 @@ struct _virQEMUCaps { char *binary; time_t ctime; time_t libvirtCtime; + bool invalidation; virBitmapPtr flags; @@ -1633,6 +1634,7 @@ virQEMUCapsNew(void) if (!(qemuCaps = virObjectNew(virQEMUCapsClass))) return NULL; + qemuCaps->invalidation = true; if (!(qemuCaps->flags = virBitmapNew(QEMU_CAPS_LAST))) goto error; @@ -1647,6 +1649,14 @@ virQEMUCapsNew(void) } +void +virQEMUCapsSetInvalidation(virQEMUCapsPtr qemuCaps, + bool enabled) +{ + qemuCaps->invalidation = enabled; +} + + static int virQEMUCapsHostCPUDataCopy(virQEMUCapsHostCPUDataPtr dst, virQEMUCapsHostCPUDataPtr src) @@ -1746,6 +1756,7 @@ virQEMUCapsPtr virQEMUCapsNewCopy(virQEMUCapsPtr qemuCaps) if (!ret) return NULL; + ret->invalidation = qemuCaps->invalidation; ret->usedQMP = qemuCaps->usedQMP; ret->kvmSupportsNesting = qemuCaps->kvmSupportsNesting; @@ -4423,6 +4434,9 @@ virQEMUCapsIsValid(void *data, struct stat sb; bool kvmSupportsNesting; + if (!qemuCaps->invalidation) + return true; + if (!qemuCaps->binary) return true; diff --git a/src/qemu/qemu_capspriv.h b/src/qemu/qemu_capspriv.h index 9059ee3059..a7492fffd2 100644 --- a/src/qemu/qemu_capspriv.h +++ b/src/qemu/qemu_capspriv.h @@ -36,6 +36,9 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, unsigned int microcodeVersion, const char *kernelVersion); +void virQEMUCapsSetInvalidation(virQEMUCapsPtr qemuCaps, + bool enabled); + int virQEMUCapsLoadCache(virArch hostArch, virQEMUCapsPtr qemuCaps, const char *filename);