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

Daniel P. Berrange berrange at redhat.com
Wed Nov 30 12:37:20 UTC 2011


On Tue, Nov 29, 2011 at 08:29:56PM +0530, Prerna Saxena wrote:
> 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;

Need a virReportOOMError() call here

> +
> +            if (t)
> +                len = t - p - 1;
> +
> +            if (!(cpus[count] = strndup(p, len)))
> +                goto error;

Need a virReportOOMError() call here too


> +        }
> +        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;

I know we don't have any test case for the x86 CPU parser here either,
but it would be desirable to create a test case for the PPC parser
while doing this. eg, save the QEMU -cpu? output into a text file
in the tests/ directory, and invoke qemuCapsParsePPCModels() on it
and validate the result.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list