[libvirt] [PATCH 6/6] Convert QEMU capabilities code to use virArch

Jiri Denemark jdenemar at redhat.com
Tue Dec 18 12:10:04 UTC 2012


On Tue, Dec 11, 2012 at 14:53:41 +0000, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange at redhat.com>
> 
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/qemu/qemu_capabilities.c | 94 ++++++++++++++++++--------------------------
>  src/qemu/qemu_capabilities.h |  2 +-
>  2 files changed, 40 insertions(+), 56 deletions(-)
> 
> diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
> index f6b53ca..a0fe1c5 100644
> --- a/src/qemu/qemu_capabilities.c
> +++ b/src/qemu/qemu_capabilities.c
...
> @@ -599,6 +598,8 @@ qemuCapsFindBinaryForArch(virArch hostarch,
>              ret = virFindFileInPath("qemu");
>      } else if (guestarch == VIR_ARCH_ITANIUM) {
>          ret = virFindFileInPath("qemu-system-ia64");
> +    } else if (guestarch == VIR_ARCH_ARMV7L) {
> +        ret = virFindFileInPath("qemu-system-arm");
>      } else {
>          /* Default case we have matching arch strings */
>          char *bin;

I think this hunk should go to 4/6. Actually, it would be even better to
create a reverse mapping function to qemuCapsArchFromString and call it
here to keep the qemu special naming at one place.

...
> @@ -2120,6 +2102,18 @@ int qemuCapsProbeQMP(qemuCapsPtr caps,
>  }
>  
>  
> +static virArch qemuCapsArchFromString(const char *arch)
> +{
> +    if (STREQ(arch, "ia64"))
> +        return VIR_ARCH_ITANIUM;
> +    if (STREQ(arch, "i386"))
> +        return VIR_ARCH_I686;
> +    if (STREQ(arch, "arm"))
> +        return VIR_ARCH_ARMV7L;
> +
> +    return virArchFromString(arch);
> +}
> +
>  #define QEMU_SYSTEM_PREFIX "qemu-system-"
>  
>  static int
...
> @@ -2381,26 +2367,24 @@ qemuCapsInitQMP(qemuCapsPtr caps,
>  
>      qemuCapsInitQMPBasic(caps);
>  
> -    if (!(caps->arch = qemuMonitorGetTargetArch(mon)))
> +    archstr = qemuMonitorGetTargetArch(mon);

This ignores possible failure in qemuMonitorGetTargetArch(); neither
qemuCapsArchFromString nor virArchFromString work with NULL arch.

> +    if ((caps->arch = qemuCapsArchFromString(archstr)) == VIR_ARCH_NONE) {
> +        VIR_DEBUG("Unknown QEMU arch %s", archstr);
> +        ret = 0;

Why is this non-fatal?

> +        VIR_FREE(archstr);
>          goto cleanup;
> -
> -    /* Map i386, i486, i586 to i686.  */
> -    if (caps->arch[0] == 'i' &&
> -        caps->arch[1] != '\0' &&
> -        caps->arch[2] == '8' &&
> -        caps->arch[3] == '6' &&
> -        caps->arch[4] == '\0')
> -        caps->arch[1] = '6';
> +    }
> +    VIR_FREE(archstr);
>  
>      /* Currently only x86_64 and i686 support PCI-multibus. */
> -    if (STREQLEN(caps->arch, "x86_64", 6) ||
> -        STREQLEN(caps->arch, "i686", 4)) {
> +    if (caps->arch == VIR_ARCH_X86_64 ||
> +        caps->arch == VIR_ARCH_I686)
>          qemuCapsSet(caps, QEMU_CAPS_PCI_MULTIBUS);
> -    }
>  
>      /* S390 and probably other archs do not support no-acpi -
>         maybe the qemu option parsing should be re-thought. */
> -    if (STRPREFIX(caps->arch, "s390"))
> +    if (caps->arch == VIR_ARCH_S390 ||
> +        caps->arch == VIR_ARCH_S390X)
>          qemuCapsClear(caps, QEMU_CAPS_NO_ACPI);
>  
>      if (qemuCapsProbeQMPCommands(caps, mon) < 0)
...

Jirka




More information about the libvir-list mailing list