On Thu, Jan 04, 2018 at 16:15:46 +0100, Peter Krempa wrote: > On Thu, Jan 04, 2018 at 15:58:09 +0100, Jiri Denemark wrote: > > From: Paolo Bonzini <pbonzini@xxxxxxxxxx> > > > > This new API reads host's CPU microcode version from /proc/cpuinfo. > > > > Unfortunately, there is no other way of reading microcode version which > > would be usable from both system and session daemon. > > > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > > Signed-off-by: Jiri Denemark <jdenemar@xxxxxxxxxx> > > --- > > src/libvirt_private.syms | 1 + > > src/util/virhostcpu.c | 43 +++++++++++++++++++++++++++++++++++++++++++ > > src/util/virhostcpu.h | 2 ++ > > 3 files changed, 46 insertions(+) > > > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > > index 8d583e3e74..a705fa846d 100644 > > --- a/src/libvirt_private.syms > > +++ b/src/libvirt_private.syms > > @@ -1869,6 +1869,7 @@ virHostCPUGetCount; > > virHostCPUGetInfo; > > virHostCPUGetKVMMaxVCPUs; > > virHostCPUGetMap; > > +virHostCPUGetMicrocodeVersion; > > virHostCPUGetOnline; > > virHostCPUGetOnlineBitmap; > > virHostCPUGetPresentBitmap; > > diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c > > index c485a97211..713fdec553 100644 > > --- a/src/util/virhostcpu.c > > +++ b/src/util/virhostcpu.c > > @@ -1206,3 +1206,46 @@ virHostCPUGetKVMMaxVCPUs(void) > > return -1; > > } > > #endif /* HAVE_LINUX_KVM_H */ > > + > > + > > +#ifdef __linux__ > > + > > +unsigned int > > +virHostCPUGetMicrocodeVersion(void) > > +{ > > + char *outbuf = NULL; > > + char *cur; > > + unsigned int version = 0; > > + > > + if (virFileReadHeaderQuiet(CPUINFO_PATH, 4096, &outbuf) < 0) { > > In other places we read 1MiB of /proc/cpuinfo: > > src/util/virsysinfo.c:#define CPUINFO_FILE_LEN (1024*1024) /* 1MB limit for /proc/cpuinfo file */ > > Will this be enough? Should be (TM) :-) We're only interested in the first CPU and the microcode version is printed very early before the endlessly growing list of CPU features. > > > > + char ebuf[1024]; > > + VIR_DEBUG("Failed to read microcode version from %s: %s", > > + CPUINFO_PATH, virStrerror(errno, ebuf, sizeof(ebuf))); > > Formatting the error message into a debug message does not make much > sense. I'd just log 'errno' in raw since this function does not really > return any errors. ... > ACK with pointless error formatting removed. It's not pointless. It makes the log useful without having to look at /usr/include/asm-generic/errno-base.h. And it will only be done once in libvirtd lifetime so it's not really wasting CPU cycles or something. Jirka -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list