"Daniel P. Berrange" <berrange@xxxxxxxxxx> 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) -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list