[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] PATCH: Allow Xen bus type for input devices in QEMU driver



"Daniel P. Berrange" <berrange redhat com> wrote:
> The Xenner virtual machine supportes a bus type of 'xen' for input devices,
> corresponding to the paravirtualized mouse device. QEMU currently rejects
> any bus type which isn't ps2 or usb. This patch makes it allow 'xen' as a
> valid bus type for Xenner guests.
>
>  b/tests/qemuxml2argvdata/qemuxml2argv-input-xen.args |    1
>  b/tests/qemuxml2argvdata/qemuxml2argv-input-xen.xml  |   24 ++++++
>  src/qemu_conf.c                                      |   72 ++++++++++++-------
>  src/qemu_conf.h                                      |    3
>  src/qemu_driver.c                                    |    2
>  tests/qemuxml2argvtest.c                             |    2
>  tests/qemuxml2xmltest.c                              |    1
>  7 files changed, 78 insertions(+), 27 deletions(-)

ACK.

> diff -r f00771a60241 src/qemu_conf.c
> --- a/src/qemu_conf.c	Sat May 10 12:57:47 2008 -0400
> +++ b/src/qemu_conf.c	Sat May 10 13:00:01 2008 -0400
> @@ -1365,6 +1365,7 @@
>
>  /* Parse the XML definition for a network interface */
>  static int qemudParseInputXML(virConnectPtr conn,
> +                              struct qemud_vm_def *vm,

This new parameter can be "const".

>                                struct qemud_vm_input_def *input,
>                                xmlNodePtr node) {
>      xmlChar *type = NULL;
> @@ -1391,26 +1392,46 @@
>      }
>
>      if (bus) {
> -        if (STREQ((const char*)bus, "ps2")) { /* Only allow mouse */
> -            if (input->type == QEMU_INPUT_TYPE_TABLET) {
> -                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> -                                 _("ps2 bus does not support %s input device"),
> -                                 (const char*)type);
> -                goto error;
> -            }
> -            input->bus = QEMU_INPUT_BUS_PS2;
> -        } else if (STREQ((const char *)bus, "usb")) { /* Allow mouse & keyboard */
> -            input->bus = QEMU_INPUT_BUS_USB;
> -        } else {
> -            qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> -                             _("unsupported input bus %s"), (const char*)bus);
> -            goto error;
> -        }
> -    } else {
> -        if (input->type == QEMU_INPUT_TYPE_MOUSE)
> -            input->bus = QEMU_INPUT_BUS_PS2;
> -        else
> -            input->bus = QEMU_INPUT_BUS_USB;
> +        if (STREQ(vm->os.type, "hvm")) {
> +            if (STREQ((const char*)bus, "ps2")) { /* Only allow mouse */
> +                if (input->type == QEMU_INPUT_TYPE_TABLET) {

The only change here is to indent, but it'd be slightly
more maintainable (proof against addition of new input types)
to test "if (input->type != QEMU_INPUT_TYPE_MOUSE)".
That way, if we ever add a third input type, this code would
remain in sync with the "mouse only" comment with no change required.
Same below.

> +                    qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> +                                     _("ps2 bus does not support %s input device"),
> +                                     (const char*)type);
> +                    goto error;
> +                }
> +                input->bus = QEMU_INPUT_BUS_PS2;
> +            } else if (STREQ((const char *)bus, "usb")) { /* Allow mouse & tablet */
> +                input->bus = QEMU_INPUT_BUS_USB;
> +            } else {
> +                qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
> +                                 _("unsupported input bus %s"), (const char*)bus);
> +                goto error;
> +            }
> +        } else {
> +            if (STREQ((const char *)bus, "xen")) { /* Allow mouse only */
> +                input->bus = QEMU_INPUT_BUS_XEN;
> +                if (input->type == QEMU_INPUT_TYPE_TABLET) {
...
>  struct qemud_vm_device_def *
>  qemudParseVMDeviceDef(virConnectPtr conn,
> -                      struct qemud_driver *driver ATTRIBUTE_UNUSED,
> +                      struct qemud_vm_def *def,

"const" here, too.

>                        const char *xmlStr)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]