[libvirt] [PATCH v6 5/6] qemu: parse qemu command line for USB keyboard

Ján Tomko jtomko at redhat.com
Thu Feb 13 12:37:08 UTC 2014


On 02/13/2014 09:48 AM, Li Zhang wrote:
> From: Li Zhang <zhlcindy at linux.vnet.ibm.com>
> 
> This patch is to format qemu command line and xen driver for USB keyboard
> and add test cases for it.
> 
> Signed-off-by: Li Zhang <zhlcindy at linux.vnet.ibm.com>
> ---
>  src/qemu/qemu_command.c                            | 41 ++++++++++++++++------
>  src/xenxs/xen_sxpr.c                               | 27 +++++++++-----
>  src/xenxs/xen_xm.c                                 | 30 +++++++++++-----
>  .../qemuxml2argv-pseries-usb-kbd.args              |  9 +++++
>  .../qemuxml2argv-pseries-usb-kbd.xml               | 19 ++++++++++
>  tests/qemuxml2argvtest.c                           |  3 ++
>  6 files changed, 103 insertions(+), 26 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-usb-kbd.xml

I'd split the patch in two - one for qemu, one for xen.


> diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c
> index d514725..79cc20e 100644
> --- a/src/xenxs/xen_sxpr.c
> +++ b/src/xenxs/xen_sxpr.c
> @@ -724,21 +724,23 @@ xenParseSxprUSB(virDomainDefPtr def,
>              tmp = sexpr_node(node, "usbdevice");
>              if (tmp && *tmp) {
>                  if (STREQ(tmp, "tablet") ||
> -                    STREQ(tmp, "mouse")) {
> +                    STREQ(tmp, "mouse") ||
> +                    STREQ(tmp, "keyboard")) {
>                      virDomainInputDefPtr input;
>                      if (VIR_ALLOC(input) < 0)
>                          goto error;
>                      input->bus = VIR_DOMAIN_INPUT_BUS_USB;
>                      if (STREQ(tmp, "tablet"))
>                          input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
> -                    else
> +                    else if (STREQ(tmp, "mouse"))
>                          input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
> +                    else
> +                        input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
>  
> -                    if (VIR_REALLOC_N(def->inputs, def->ninputs+1) < 0) {
> +                    if (VIR_APPEND_ELEMENT(def->inputs, def->ninputs, input) < 0) {
>                          VIR_FREE(input);
>                          goto error;
>                      }
> -                    def->inputs[def->ninputs++] = input;
>                  } else {
>                      /* XXX Handle other non-input USB devices later */
>                  }
> @@ -2144,15 +2146,24 @@ xenFormatSxprInput(virDomainInputDefPtr input,
>          return 0;
>  
>      if (input->type != VIR_DOMAIN_INPUT_TYPE_MOUSE &&
> -        input->type != VIR_DOMAIN_INPUT_TYPE_TABLET) {
> +        input->type != VIR_DOMAIN_INPUT_TYPE_TABLET &&
> +        input->type != VIR_DOMAIN_INPUT_TYPE_KBD) {
>          virReportError(VIR_ERR_INTERNAL_ERROR,
>                         _("unexpected input type %d"), input->type);
>          return -1;
>      }
>  
> -    virBufferAsprintf(buf, "(usbdevice %s)",
> -                      input->type == VIR_DOMAIN_INPUT_TYPE_MOUSE ?
> -                      "mouse" : "tablet");
> +    switch (input->type) {
> +        case VIR_DOMAIN_INPUT_TYPE_MOUSE:
> +            virBufferAsprintf(buf, "(usbdevice %s)","mouse")
> +            break;
> +        case VIR_DOMAIN_INPUT_TYPE_TABLET:
> +            virBufferAsprintf(buf, "(usbdevice %s)","tablet")
> +            break;
> +        case VIR_DOMAIN_INPUT_TYPE_KBD:
> +            virBufferAsprintf(buf, "(usbdevice %s)","keyboard")
> +            break;
> +    }

In all three cases there is a space missing between arguments and a semicolon
missing at the end.

>  
>      return 0;
>  }
> diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
> index 5e89876..b448e99 100644
> --- a/src/xenxs/xen_xm.c
> +++ b/src/xenxs/xen_xm.c
> @@ -886,14 +886,18 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
>              goto cleanup;
>          if (str &&
>              (STREQ(str, "tablet") ||
> -             STREQ(str, "mouse"))) {
> +             STREQ(str, "mouse") ||
> +             STREQ(str, "keyboard"))) {
>              virDomainInputDefPtr input;
>              if (VIR_ALLOC(input) < 0)
>                  goto cleanup;
>              input->bus = VIR_DOMAIN_INPUT_BUS_USB;
> -            input->type = STREQ(str, "tablet") ?
> -                VIR_DOMAIN_INPUT_TYPE_TABLET :
> -                VIR_DOMAIN_INPUT_TYPE_MOUSE;
> +            if (STREQ(str, "mouse"))
> +                input->type = VIR_DOMAIN_INPUT_TYPE_MOUSE;
> +            else if (STREQ(str, "tablet"))
> +                input->type = VIR_DOMAIN_INPUT_TYPE_TABLET;
> +            else (STREQ(str, "keyboard"))

s/else/else if/

> +                input->type = VIR_DOMAIN_INPUT_TYPE_KBD;
>              if (VIR_ALLOC_N(def->inputs, 1) < 0) {
>                  virDomainInputDefFree(input);
>                  goto cleanup;

ACK to the QEMU part. The xen part looks fine to me.

Jan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140213/4eebc701/attachment-0001.sig>


More information about the libvir-list mailing list