[libvirt] [PATCH 5/5] qemu: capabilities: force update if the microcode version does not match
Peter Krempa
pkrempa at redhat.com
Thu Jan 4 15:39:10 UTC 2018
On Thu, Jan 04, 2018 at 15:58:12 +0100, Jiri Denemark wrote:
> From: Paolo Bonzini <pbonzini at redhat.com>
>
> A microcode update can cause the CPUID bits to change; an example
> from the past was the update that disabled TSX on several Haswell
> and Broadwell machines.
>
> Therefore, place microcode version in the virQEMUCaps struct and
> XML, and rebuild the cache if the versions do not match.
>
> Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
> Signed-off-by: Jiri Denemark <jdenemar at redhat.com>
> ---
> src/qemu/qemu_capabilities.c | 40 +++++++++++++++++++++-
> src/qemu/qemu_capabilities.h | 6 ++--
> src/qemu/qemu_capspriv.h | 5 +++
> src/qemu/qemu_driver.c | 9 ++++-
> tests/qemucapabilitiesdata/caps_1.2.2.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_1.3.1.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_1.4.2.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml | 1 +
> .../caps_2.10.0-gicv2.aarch64.xml | 1 +
> .../caps_2.10.0-gicv3.aarch64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml | 1 +
> .../caps_2.6.0-gicv2.aarch64.xml | 1 +
> .../caps_2.6.0-gicv3.aarch64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 +
> tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml | 1 +
> tests/qemucapabilitiestest.c | 14 +++++---
> tests/qemucapsprobe.c | 2 +-
> tests/testutilsqemu.c | 2 +-
> 32 files changed, 93 insertions(+), 10 deletions(-)
>
[...]
> diff --git a/tests/qemucapabilitiestest.c b/tests/qemucapabilitiestest.c
> index dde5f767b8..87807b4135 100644
> --- a/tests/qemucapabilitiestest.c
> +++ b/tests/qemucapabilitiestest.c
> @@ -61,10 +61,16 @@ testQemuCaps(const void *opaque)
> qemuMonitorTestGetMonitor(mon)) < 0)
> goto cleanup;
>
> - if (virQEMUCapsGet(capsActual, QEMU_CAPS_KVM) &&
> - virQEMUCapsInitQMPMonitorTCG(capsActual,
> - qemuMonitorTestGetMonitor(mon)) < 0)
> - goto cleanup;
> + if (virQEMUCapsGet(capsActual, QEMU_CAPS_KVM)) {
> + if (virQEMUCapsInitQMPMonitorTCG(capsActual,
> + qemuMonitorTestGetMonitor(mon)) < 0)
> + goto cleanup;
> +
> + /* Fill microcodeVersion with a "random" value which is the file
> + * length to provide a reproducible number for testing.
> + */
> + virQEMUCapsSetMicrocodeVersion(capsActual, virFileLength(repliesFile, -1));
> + }
>
> if (!(actual = virQEMUCapsFormatCache(capsActual)))
> goto cleanup;
Interresting approach. The only drawback will be that when updating
capabilities this will generate 2 lines more of diff.
ACK
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180104/3a21ea2e/attachment-0001.sig>
More information about the libvir-list
mailing list