[libvirt] [RFC v3 PATCH 3/5] PowerPC : Add support for ppc64 qemu

Prerna Saxena prerna at linux.vnet.ibm.com
Tue Nov 29 14:59:56 UTC 2011


From: Prerna Saxena <prerna at linux.vnet.ibm.com>
Date: Mon, 3 Oct 2011 06:01:33 -0700
Subject: [PATCH 3/5] Add support for ppc64 qemu

This enables libvirt to select the correct qemu binary (qemu-system-ppc64)
for a guest vm based on arch 'ppc64'.
Also, libvirt is enabled to correctly parse the list of supported PowerPC
CPUs, generated by running 'qemu-system-ppc64 -cpu ?'

Signed-off-by: Prerna Saxena <prerna at linux.vnet.ibm.com>
---
 src/qemu/qemu_capabilities.c |   64 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index c5fe41d..c2d3d93 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -185,6 +185,7 @@ static const struct qemu_arch_info const arch_info_hvm[] = {
     {  "mipsel", 32, NULL, "qemu-system-mipsel", NULL, NULL, 0 },
     {  "sparc",  32, NULL, "qemu-system-sparc",  NULL, NULL, 0 },
     {  "ppc",    32, NULL, "qemu-system-ppc",    NULL, NULL, 0 },
+    {  "ppc64",    64, NULL, "qemu-system-ppc64",    NULL, NULL, 0 },
     {  "itanium", 64, NULL, "qemu-system-ia64",  NULL, NULL, 0 },
     {  "s390x",  64, NULL, "qemu-system-s390x",  NULL, NULL, 0 },
 };
@@ -477,6 +478,67 @@ error:
     return -1;
 }
 
+/* ppc64 parser.
+ * Format : PowerPC <machine> <description>
+ */
+static int
+qemuCapsParsePPCModels(const char *output,
+                       unsigned int *retcount,
+                       const char ***retcpus)
+{
+    const char *p = output;
+    const char *next;
+    unsigned int count = 0;
+    const char **cpus = NULL;
+    int i;
+    do {
+        const char *t;
+
+        if ((next = strchr(p, '\n')))
+            next++;
+
+        if (!STRPREFIX(p, "PowerPC "))
+            continue;
+
+        /* Skip the preceding sub-string "PowerPC " */
+        p += 8;
+
+        /*Malformed string, does not obey the format 'PowerPC <model> <desc>'*/
+        if (!(t = strchr(p, ' ')) || (next && t >= next))
+            continue;
+
+        if (*p == '\0' || *p == '\n')
+            continue;
+
+        if (retcpus) {
+            unsigned int len;
+
+            if (VIR_REALLOC_N(cpus, count + 1) < 0)
+                goto error;
+
+            if (t)
+                len = t - p - 1;
+
+            if (!(cpus[count] = strndup(p, len)))
+                goto error;
+        }
+        count++;
+    } while ((p = next));
+
+    if (retcount)
+        *retcount = count;
+    if (retcpus)
+        *retcpus = cpus;
+    return 0;
+
+error:
+    if (cpus) {
+        for (i = 0; i < count; i++)
+            VIR_FREE(cpus[i]);
+    }
+    VIR_FREE(cpus);
+    return -1;
+}
 
 int
 qemuCapsProbeCPUModels(const char *qemu,
@@ -497,6 +559,8 @@ qemuCapsProbeCPUModels(const char *qemu,
 
     if (STREQ(arch, "i686") || STREQ(arch, "x86_64"))
         parse = qemuCapsParseX86Models;
+    else if (STREQ(arch, "ppc64"))
+        parse = qemuCapsParsePPCModels;
     else {
         VIR_DEBUG("don't know how to parse %s CPU models", arch);
         return 0;
-- 
1.7.7



-- 
Prerna Saxena

Linux Technology Centre,
IBM Systems and Technology Lab,
Bangalore, India




More information about the libvir-list mailing list