"Daniel P. Berrange" <berrange(a)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)