Andrea Bolognani <abologna@xxxxxxxxxx> [2017-12-11, 05:40PM +0100]: > This handles only the /proc/cpuinfo part of virHostCPUGetInfo(). > > Signed-off-by: Andrea Bolognani <abologna@xxxxxxxxxx> > --- > src/util/virhostcpu.c | 60 +++++++++++++++++++++++++++++++++------------------ > 1 file changed, 39 insertions(+), 21 deletions(-) > > diff --git a/src/util/virhostcpu.c b/src/util/virhostcpu.c > index c485a9721..4d5c56659 100644 > --- a/src/util/virhostcpu.c > +++ b/src/util/virhostcpu.c > @@ -508,33 +508,17 @@ virHostCPUHasValidSubcoreConfiguration(int threads_per_subcore) > return ret; > } > > -int > -virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, > - virArch arch, > - unsigned int *cpus, > - unsigned int *mhz, > - unsigned int *nodes, > - unsigned int *sockets, > - unsigned int *cores, > - unsigned int *threads) > + > +static int > +virHostCPUGetInfoParseCPUInfo(FILE *cpuinfo, > + virArch arch, > + unsigned int *mhz) > { > - virBitmapPtr present_cpus_map = NULL; > - virBitmapPtr online_cpus_map = NULL; > char line[1024]; > - DIR *nodedir = NULL; > - struct dirent *nodedirent = NULL; > - int nodecpus, nodecores, nodesockets, nodethreads, offline = 0; > - int threads_per_subcore = 0; > - unsigned int node; > int ret = -1; > - char *sysfs_nodedir = NULL; > - char *sysfs_cpudir = NULL; > - int direrr; > > *mhz = 0; I wouldn't move this initialization. > - *cpus = *nodes = *sockets = *cores = *threads = 0; > > - /* Start with parsing CPU clock speed from /proc/cpuinfo */ > while (fgets(line, sizeof(line), cpuinfo) != NULL) { > if (ARCH_IS_X86(arch)) { > char *buf = line; > @@ -614,6 +598,40 @@ virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, > } > } > > + ret = 0; > + > + cleanup: > + return ret; > +} > + > +int > +virHostCPUGetInfoPopulateLinux(FILE *cpuinfo, > + virArch arch, > + unsigned int *cpus, > + unsigned int *mhz, > + unsigned int *nodes, > + unsigned int *sockets, > + unsigned int *cores, > + unsigned int *threads) > +{ > + virBitmapPtr present_cpus_map = NULL; > + virBitmapPtr online_cpus_map = NULL; > + DIR *nodedir = NULL; > + struct dirent *nodedirent = NULL; > + int nodecpus, nodecores, nodesockets, nodethreads, offline = 0; > + int threads_per_subcore = 0; > + unsigned int node; > + int ret = -1; > + char *sysfs_nodedir = NULL; > + char *sysfs_cpudir = NULL; > + int direrr; > + > + *cpus = *nodes = *sockets = *cores = *threads = 0; > + > + /* Start with parsing CPU clock speed from /proc/cpuinfo */ > + if (virHostCPUGetInfoParseCPUInfo(cpuinfo, arch, mhz) < 0) > + goto cleanup; Why do we cleanup here and abandon the rest of the information? Since the information in /proc/cpuinfo is kind of volatile in its format, shouldn't we be liberal in what we accept? If we can't parse it, we just report mhz = 0, but gathering the rest of the information in this function is still valuable. > + > /* Get information about what CPUs are present in the host and what > * CPUs are online, so that we don't have to so for each node */ > present_cpus_map = virHostCPUGetPresentBitmap(); > -- > 2.14.3 > > -- > libvir-list mailing list > libvir-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/libvir-list > -- IBM Systems Linux on z Systems & Virtualization Development ------------------------------------------------------------------------ IBM Deutschland Schönaicher Str. 220 71032 Böblingen Phone: +49 7031 16 1819 E-Mail: bwalk@xxxxxxxxxx ------------------------------------------------------------------------ IBM Deutschland Research & Development GmbH Vorsitzende des Aufsichtsrats: Martina Koederitz Geschäftsführung: Dirk Wittkopp Sitz der Gesellschaft: Böblingen Registergericht: Amtsgericht Stuttgart, HRB 243294
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list