[libvirt] [PATCH] ppc: Enable starting of VMs on ppc host

Subject: ppc: Enable starting of VMs on ppc host Due to differences in /proc/cpuinfo the parsing of the cpu data is different between architectures. On PPC /proc/cpuinfo looks like this: [original formatting with tabs] processor : 0 cpu : PPC970MP, altivec supported clock : 2297.700000MHz revision : 1.1 (pvr 0044 0101) processor : 1 cpu : PPC970MP, altivec supported clock : 2297.700000MHz revision : 1.1 (pvr 0044 0101) [..] timebase : 14318000 platform : pSeries model : IBM,8844-AC1 machine : CHRP IBM,8844-AC1 The patch adapts the parsing of the data found in /proc/cpuinfo. /sys/devices/system/cpu/cpuX/topology/physical_package_id also always returns -1. Check for it on ppc and make it '0' if found negative. Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com> --- src/nodeinfo.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) Index: libvirt/src/nodeinfo.c =================================================================== --- libvirt.orig/src/nodeinfo.c +++ libvirt/src/nodeinfo.c @@ -163,7 +163,14 @@ cleanup: static int parse_socket(unsigned int cpu) { - return get_cpu_value(cpu, "topology/physical_package_id", false); + int ret = get_cpu_value(cpu, "topology/physical_package_id", false); +#if defined(__powerpc__) || \ + defined(__powerpc64__) + /* ppc has -1 */ + if (ret < 0) + ret = 0; +#endif + return ret; } int linuxNodeInfoCPUPopulate(FILE *cpuinfo, @@ -206,6 +213,9 @@ int linuxNodeInfoCPUPopulate(FILE *cpuin return -1; } nodeinfo->cpus++; +#if defined(__x86_64__) || \ + defined(__amd64__) || \ + defined(__i386__) } else if (STRPREFIX(buf, "cpu MHz")) { char *p; unsigned int ui; @@ -237,6 +247,27 @@ int linuxNodeInfoCPUPopulate(FILE *cpuin && id > nodeinfo->cores) nodeinfo->cores = id; } +#elif defined(__powerpc__) || \ + defined(__powerpc64__) + } else if (STRPREFIX(buf, "clock")) { + char *p; + unsigned int ui; + buf += 5; + while (*buf && c_isspace(*buf)) + buf++; + if (*buf != ':' || !buf[1]) { + nodeReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("parsing cpuinfo cpu MHz")); + return -1; + } + if (virStrToLong_ui(buf+1, &p, 10, &ui) == 0 + /* Accept trailing fractional part. */ + && (*p == '\0' || *p == '.' || c_isspace(*p))) + nodeinfo->mhz = ui; + } +#else +# warning Parser for /proc/cpuinfo needs to be adapted for your architecture +#endif } if (!nodeinfo->cpus) {

On 04/14/2011 11:45 AM, Stefan Berger wrote:
Subject: ppc: Enable starting of VMs on ppc host
The patch adapts the parsing of the data found in /proc/cpuinfo.
/sys/devices/system/cpu/cpuX/topology/physical_package_id also always returns -1. Check for it on ppc and make it '0' if found negative.
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
--- src/nodeinfo.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)
ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On 04/14/2011 02:18 PM, Eric Blake wrote:
On 04/14/2011 11:45 AM, Stefan Berger wrote:
Subject: ppc: Enable starting of VMs on ppc host
The patch adapts the parsing of the data found in /proc/cpuinfo.
/sys/devices/system/cpu/cpuX/topology/physical_package_id also always returns -1. Check for it on ppc and make it '0' if found negative.
Signed-off-by: Stefan Berger<stefanb@linux.vnet.ibm.com>
--- src/nodeinfo.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)
ACK.
Pushed. I unfortunately didn't pay attention to syntax-check and the indentation of the #if's is wrong. Gee. Stefan Stefan

On 04/14/2011 12:56 PM, Stefan Berger wrote:
On 04/14/2011 02:18 PM, Eric Blake wrote:
On 04/14/2011 11:45 AM, Stefan Berger wrote:
Subject: ppc: Enable starting of VMs on ppc host
The patch adapts the parsing of the data found in /proc/cpuinfo.
/sys/devices/system/cpu/cpuX/topology/physical_package_id also always returns -1. Check for it on ppc and make it '0' if found negative.
Signed-off-by: Stefan Berger<stefanb@linux.vnet.ibm.com>
--- src/nodeinfo.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-)
ACK.
Pushed.
I unfortunately didn't pay attention to syntax-check and the indentation of the #if's is wrong. Gee.
Oh well. I've pushed the obvious fixup as trivial. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org
participants (2)
-
Eric Blake
-
Stefan Berger