From eb954ede7244320ee57e13edc9a2ca78802e5ee5 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 21 Apr 2011 17:27:40 +0200 Subject: [PATCH] Add support for s390(x) cpu options parsing Up to now we missed parser for cpuinfo on x390(x) machines. Those machines have only 1 thread, core, socket. What is missing is information about CPU frequency. --- src/nodeinfo.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/nodeinfo.c b/src/nodeinfo.c index e0221f08be..f55c83e6ca 100644 --- a/src/nodeinfo.c +++ b/src/nodeinfo.c @@ -165,8 +165,10 @@ static int parse_socket(unsigned int cpu) { int ret = get_cpu_value(cpu, "topology/physical_package_id", false); # if defined(__powerpc__) || \ - defined(__powerpc64__) - /* ppc has -1 */ + defined(__powerpc64__) || \ + defined(__s390__) || \ + defined(__s390x__) + /* ppc and s390(x) has -1 */ if (ret < 0) ret = 0; # endif @@ -265,6 +267,29 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo, && (*p == '\0' || *p == '.' || c_isspace(*p))) nodeinfo->mhz = ui; } +# elif defined(__s390__) || \ + defined(__s390x__) + } else if (STRPREFIX(buf, "# processors")) { + char *p; + unsigned int ui; + buf += 12; + while (*buf && c_isspace(*buf)) + buf++; + if (*buf != ':' || !buf[1]) { + nodeReportError(VIR_ERR_INTERNAL_ERROR, + _("parsing number of processors %c"), *buf); + return -1; + } + if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 + && (*p == '\0' || c_isspace(*p))) + nodeinfo->cpus = ui; + /* No other interesting infos are available in /proc/cpuinfo. + * However, there is a line identifying processor's version, + * identification and machine, but we don't want it to be caught + * and parsed in next iteration, because it is not in expected + * format and thus lead to error. */ + break; + } # else # warning Parser for /proc/cpuinfo needs to be adapted for your architecture # endif -- GitLab