mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-11-03 11:51:11 +00:00
util: virsysinfo: parse frequency information on S390
Let's also parse the available processor frequency information on S390 so that it can be utilized by virsh sysinfo: # virsh sysinfo <sysinfo type='smbios'> ... <processor> <entry name='family'>2964</entry> <entry name='manufacturer'>IBM/S390</entry> <entry name='version'>00</entry> <entry name='max_speed'>5000</entry> <entry name='serial_number'>145F07</entry> </processor> ... </sysinfo> Reviewed-by: Marc Hartmayer <mhartmay@linux.vnet.ibm.com> Reviewed-by: Boris Fiuczynski <fiuczy@linux.vnet.ibm.com> Signed-off-by: Bjoern Walk <bwalk@linux.vnet.ibm.com>
This commit is contained in:
parent
85604bc332
commit
4be9959b41
@ -34,6 +34,7 @@
|
|||||||
#include "virsysinfo.h"
|
#include "virsysinfo.h"
|
||||||
#include "viralloc.h"
|
#include "viralloc.h"
|
||||||
#include "vircommand.h"
|
#include "vircommand.h"
|
||||||
|
#include "virlog.h"
|
||||||
#include "virfile.h"
|
#include "virfile.h"
|
||||||
#include "virstring.h"
|
#include "virstring.h"
|
||||||
|
|
||||||
@ -42,6 +43,7 @@
|
|||||||
|
|
||||||
#define VIR_FROM_THIS VIR_FROM_SYSINFO
|
#define VIR_FROM_THIS VIR_FROM_SYSINFO
|
||||||
|
|
||||||
|
VIR_LOG_INIT("util.sysinfo");
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virSysinfo, VIR_SYSINFO_LAST,
|
VIR_ENUM_IMPL(virSysinfo, VIR_SYSINFO_LAST,
|
||||||
"smbios");
|
"smbios");
|
||||||
@ -495,11 +497,12 @@ virSysinfoParseS390Processor(const char *base, virSysinfoDefPtr ret)
|
|||||||
char *tmp_base;
|
char *tmp_base;
|
||||||
char *manufacturer = NULL;
|
char *manufacturer = NULL;
|
||||||
char *procline = NULL;
|
char *procline = NULL;
|
||||||
|
char *ncpu = NULL;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
virSysinfoProcessorDefPtr processor;
|
virSysinfoProcessorDefPtr processor;
|
||||||
|
|
||||||
if (!(tmp_base = virSysinfoParseS390Line(base, "vendor_id", &manufacturer)))
|
if (!(tmp_base = virSysinfoParseS390Line(base, "vendor_id", &manufacturer)))
|
||||||
goto cleanup;
|
goto error;
|
||||||
|
|
||||||
/* Find processor N: line and gather the processor manufacturer,
|
/* Find processor N: line and gather the processor manufacturer,
|
||||||
version, serial number, and family */
|
version, serial number, and family */
|
||||||
@ -507,10 +510,10 @@ virSysinfoParseS390Processor(const char *base, virSysinfoDefPtr ret)
|
|||||||
&& (tmp_base = virSysinfoParseS390Line(tmp_base, "processor ",
|
&& (tmp_base = virSysinfoParseS390Line(tmp_base, "processor ",
|
||||||
&procline))) {
|
&procline))) {
|
||||||
if (VIR_EXPAND_N(ret->processor, ret->nprocessor, 1) < 0)
|
if (VIR_EXPAND_N(ret->processor, ret->nprocessor, 1) < 0)
|
||||||
goto cleanup;
|
goto error;
|
||||||
processor = &ret->processor[ret->nprocessor - 1];
|
processor = &ret->processor[ret->nprocessor - 1];
|
||||||
if (VIR_STRDUP(processor->processor_manufacturer, manufacturer) < 0)
|
if (VIR_STRDUP(processor->processor_manufacturer, manufacturer) < 0)
|
||||||
goto cleanup;
|
goto error;
|
||||||
if (!virSysinfoParseS390Delimited(procline, "version",
|
if (!virSysinfoParseS390Delimited(procline, "version",
|
||||||
&processor->processor_version,
|
&processor->processor_version,
|
||||||
'=', ',') ||
|
'=', ',') ||
|
||||||
@ -520,15 +523,43 @@ virSysinfoParseS390Processor(const char *base, virSysinfoDefPtr ret)
|
|||||||
!virSysinfoParseS390Delimited(procline, "machine",
|
!virSysinfoParseS390Delimited(procline, "machine",
|
||||||
&processor->processor_family,
|
&processor->processor_family,
|
||||||
'=', '\n'))
|
'=', '\n'))
|
||||||
goto cleanup;
|
goto error;
|
||||||
|
|
||||||
VIR_FREE(procline);
|
VIR_FREE(procline);
|
||||||
}
|
}
|
||||||
result = 0;
|
|
||||||
|
/* now, for each processor found, extract the frequency information */
|
||||||
|
tmp_base = (char *) base;
|
||||||
|
|
||||||
|
while ((tmp_base = strstr(tmp_base, "cpu number")) &&
|
||||||
|
(tmp_base = virSysinfoParseS390Line(tmp_base, "cpu number", &ncpu))) {
|
||||||
|
unsigned int n;
|
||||||
|
char *mhz = NULL;
|
||||||
|
|
||||||
|
if (virStrToLong_uip(ncpu, NULL, 10, &n) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (n >= ret->nprocessor) {
|
||||||
|
VIR_DEBUG("CPU number '%u' out of range", n);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(tmp_base = strstr(tmp_base, "cpu MHz static")) ||
|
||||||
|
!virSysinfoParseS390Line(tmp_base, "cpu MHz static", &mhz))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
ret->processor[n].processor_max_speed = mhz;
|
||||||
|
|
||||||
|
VIR_FREE(ncpu);
|
||||||
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
error:
|
||||||
VIR_FREE(manufacturer);
|
VIR_FREE(manufacturer);
|
||||||
VIR_FREE(procline);
|
VIR_FREE(procline);
|
||||||
|
VIR_FREE(ncpu);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user