[libvirt] [PATCH v2 17/17] qemu: assume various QEMU 0.10 features are always available

John Ferlan jferlan at redhat.com
Mon Nov 9 23:28:03 UTC 2015



On 11/09/2015 11:24 AM, Daniel P. Berrange wrote:
> The -sdl and -net ...name=XXX arguments were both introduced
> in QEMU 0.10, so the QEMU driver can assume they are always
> available.
> 

The -sdl wasn't really removed it seems - although it did me peeking
into the rabbit hole for a make check failure...

> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
>  src/qemu/qemu_capabilities.c                       |  4 ----
>  src/qemu/qemu_capabilities.h                       |  6 +----
>  src/qemu/qemu_command.c                            | 27 ++++++++--------------
>  src/qemu/qemu_hotplug.c                            |  9 +-------
>  tests/qemucapabilitiesdata/caps_1.2.2-1.caps       |  1 -
>  tests/qemucapabilitiesdata/caps_1.3.1-1.caps       |  1 -
>  tests/qemucapabilitiesdata/caps_1.4.2-1.caps       |  1 -
>  tests/qemucapabilitiesdata/caps_1.5.3-1.caps       |  1 -
>  tests/qemucapabilitiesdata/caps_1.6.0-1.caps       |  1 -
>  tests/qemucapabilitiesdata/caps_1.6.50-1.caps      |  1 -
>  tests/qemucapabilitiesdata/caps_2.1.1-1.caps       |  1 -
>  tests/qemucaps2xmldata/all_1.6.0-1.caps            |  1 -
>  tests/qemucaps2xmldata/nodisksnapshot_1.6.0-1.caps |  1 -
>  tests/qemuhelptest.c                               |  8 -------
>  tests/qemuhotplugtest.c                            |  1 -
>  .../qemuxml2argv-graphics-sdl-fullscreen.args      |  1 +
>  .../qemuxml2argv-graphics-sdl.args                 |  1 +
>  .../qemuxml2argvdata/qemuxml2argv-net-client.args  |  4 ++--
>  .../qemuxml2argv-net-eth-ifname.args               |  4 ++--
>  tests/qemuxml2argvdata/qemuxml2argv-net-eth.args   |  4 ++--
>  tests/qemuxml2argvdata/qemuxml2argv-net-mcast.args |  4 ++--
>  .../qemuxml2argvdata/qemuxml2argv-net-server.args  |  4 ++--
>  tests/qemuxml2argvdata/qemuxml2argv-net-udp.args   |  5 ++--
>  tests/qemuxml2argvdata/qemuxml2argv-net-user.args  |  4 ++--
>  .../qemuxml2argvdata/qemuxml2argv-net-virtio.args  |  4 ++--
>  tests/qemuxml2argvtest.c                           |  6 ++---
>  26 files changed, 33 insertions(+), 72 deletions(-)
> 

Having "-sdl" in the args for qemuxml2argv-graphics-sdl.args and
qemuxml2argv-graphics-sdl-fullscreen.arg caused 'qemuargv2xmltest' to fail.

Running with debug on showed:

48) QEMU ARGV-2-XML graphics-sdl
... Got unexpected warning from qemuParseCommandLineString:
2015-11-09 21:52:58.744+0000: 7908: info : libvirt version: 1.2.22
2015-11-09 21:52:58.744+0000: 7908: warning : qemuParseCommandLine:13603
: unknown QEMU argument 'std', adding to the qemu namespace
^[[31m^[[1mFAILED^[[0m
49) QEMU ARGV-2-XML graphics-sdl-fullscreen
... Got unexpected warning from qemuParseCommandLineString:
2015-11-09 21:52:58.744+0000: 7908: warning : qemuParseCommandLine:13603
: unknown QEMU argument 'cirrus', adding to the qemu namespace
^[[31m^[[1mFAILED^[[0m

So someone was stripping (or not stripping) an argument...

Since graphics-sdl.args has:

 -parallel none \
+-sdl \
 -vga std

and graphics-sdl-fullscreen has:

 -full-screen \
+-sdl \
 -vga cirrus

After a bit of debugging - qemuParseCommandLine has the following:

       } else if (STRPREFIX(arg, "-hd") ||
                   STRPREFIX(arg, "-sd") ||
                   STRPREFIX(arg, "-fd") ||
                   STREQ(arg, "-cdrom")) {
            WANT_VALUE();

If I add:

        } else if (STREQ(arg, "-sdl")) {
            /* Ignore */

Just before that, then things are happy again.


While looking for the cause I also noted the following:

> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index a29cd08..5086c40 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -1164,17 +1164,14 @@ qemuAssignDeviceAliases(virDomainDefPtr def, virQEMUCapsPtr qemuCaps)
>          if (qemuAssignDeviceDiskAlias(def, def->disks[i], qemuCaps) < 0)
>              return -1;
>      }
> -    if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NET_NAME) ||
> -        virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
> -        for (i = 0; i < def->nnets; i++) {
> -            /* type='hostdev' interfaces are also on the hostdevs list,
> -             * and will have their alias assigned with other hostdevs.
> -             */
> -            if (virDomainNetGetActualType(def->nets[i])
> -                != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
> -                qemuAssignDeviceNetAlias(def, def->nets[i], i) < 0) {
> -                return -1;
> -            }
> +    for (i = 0; i < def->nnets; i++) {
> +        /* type='hostdev' interfaces are also on the hostdevs list,
> +         * and will have their alias assigned with other hostdevs.
> +         */
> +        if (virDomainNetGetActualType(def->nets[i])
> +            != VIR_DOMAIN_NET_TYPE_HOSTDEV &&
> +            qemuAssignDeviceNetAlias(def, def->nets[i], i) < 0) {
> +            return -1;
>          }
>      }
>  
> @@ -8514,8 +8511,7 @@ qemuBuildGraphicsCommandLine(virQEMUDriverConfigPtr cfg,
>  {
>      switch ((virDomainGraphicsType) graphics->type) {
>      case VIR_DOMAIN_GRAPHICS_TYPE_SDL:
> -        if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_0_10) &&
> -            !virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL)) {
> +        if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL)) {
>              virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>                             _("sdl not supported by '%s'"), def->emulator);
>              return -1;

later in this code there's a:

       if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_SDL))
            virCommandAddArg(cmd, "-sdl");


The second caps check is probably unnecessary now.

John
> @@ -10551,11 +10547,6 @@ qemuBuildCommandLine(virConnectPtr conn,
>          }
>      }
>  
> -    if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_0_10) && sdl + vnc + spice > 1) {
> -        virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
> -                       _("only 1 graphics device is supported"));
> -        goto error;
> -    }
>      if (sdl > 1 || vnc > 1 || spice > 1) {
>          virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
>                         _("only 1 graphics device of each type "

[...]




More information about the libvir-list mailing list