On Thu, Jan 04, 2018 at 15:58:11 +0100, Jiri Denemark wrote: > From: Paolo Bonzini <[email protected]> > > 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. > > In order to track the x86 microcode version in the QEMU capabilities, > we have to fetch it and store it in the host CPU. This also makes the > version visible in "virsh capabilities", which is a nice side effect. > > Signed-off-by: Paolo Bonzini <[email protected]> > Signed-off-by: Jiri Denemark <[email protected]> > --- > src/conf/cpu_conf.c | 14 ++++++++++++++ > src/conf/cpu_conf.h | 1 + > src/cpu/cpu_x86.c | 9 +++++++++ > 3 files changed, 24 insertions(+)
[...]
> @@ -382,6 +384,14 @@ virCPUDefParseXML(xmlXPathContextPtr ctxt,
> goto cleanup;
> }
> VIR_FREE(arch);
> +
> + if (virXPathBoolean("boolean(./microcode[1]/@version)", ctxt) > 0 &&
> + virXPathUInt("string(./microcode[1]/@version)", ctxt,
> + &def->microcodeVersion) < 0) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> + _("invalid microcode version"));
> + goto cleanup;
> + }
> }
>
> if (!(def->model = virXPathString("string(./model[1])", ctxt)) &&
> @@ -720,6 +730,10 @@ virCPUDefFormatBuf(virBufferPtr buf,
> if (formatModel && def->vendor)
> virBufferEscapeString(buf, "<vendor>%s</vendor>\n", def->vendor);
>
> + if (def->type == VIR_CPU_TYPE_HOST && def->microcodeVersion)
Hmm, looks like you should add a comment to virHostCPUGetMicrocodeVersion
stating that 0 is a special value.
> + virBufferAsprintf(buf, "<microcode version='%u'/>\n",
> + def->microcodeVersion);
> +
ACK
signature.asc
Description: PGP signature
-- libvir-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/libvir-list
