From 42ce352c131939069ecd0ad781f24cde26f456cd Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Mon, 14 Dec 2009 19:32:32 +0000 Subject: [PATCH] Convert USB hostdevices over to -device The old syntax was -usbdevice host:PRODUCT:VENDOR Or -usbdevice host:BUS.DEV The new syntax is -device usb-host,product=PRODUCT,vendor=VENDOR Or -device usb-host,hostbus=BUS,hostaddr=DEV --- src/qemu/qemu_conf.c | 32 +++++++++++++------ ...muxml2argv-hostdev-usb-address-device.args | 1 + ...emuxml2argv-hostdev-usb-address-device.xml | 27 ++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 4 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.xml diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 49e4c08a5d..84358c1284 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -3511,22 +3511,36 @@ int qemudBuildCommandLine(virConnectPtr conn, /* USB */ if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS && hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) { - if(hostdev->source.subsys.u.usb.vendor) { - ret = virAsprintf(&usbdev, "host:%.4x:%.4x", - hostdev->source.subsys.u.usb.vendor, - hostdev->source.subsys.u.usb.product); + if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { + ADD_ARG_LIT("-device"); + if (hostdev->source.subsys.u.usb.vendor) { + ret = virAsprintf(&usbdev, "usb-host,vendor=%.4x,product=%.4x,id=%s", + hostdev->source.subsys.u.usb.vendor, + hostdev->source.subsys.u.usb.product, + hostdev->info.alias); + } else { + ret = virAsprintf(&usbdev, "usb-host,hostbus=%.3d,hostaddr=%.3d,id=%s", + hostdev->source.subsys.u.usb.bus, + hostdev->source.subsys.u.usb.device, + hostdev->info.alias); + } } else { + ADD_ARG_LIT("-usbdevice"); + if (hostdev->source.subsys.u.usb.vendor) { + ret = virAsprintf(&usbdev, "host:%.4x:%.4x", + hostdev->source.subsys.u.usb.vendor, + hostdev->source.subsys.u.usb.product); + } else { ret = virAsprintf(&usbdev, "host:%.3d.%.3d", - hostdev->source.subsys.u.usb.bus, - hostdev->source.subsys.u.usb.device); + hostdev->source.subsys.u.usb.bus, + hostdev->source.subsys.u.usb.device); + } } if (ret < 0) goto error; - ADD_ARG_LIT("-usbdevice"); - ADD_ARG_LIT(usbdev); - VIR_FREE(usbdev); + ADD_ARG(usbdev); } /* PCI */ diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args new file mode 100644 index 0000000000..70f48c4c11 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.args @@ -0,0 +1 @@ +LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -hda /dev/HostVG/QEMUGuest1 -usb -device usb-host,hostbus=014,hostaddr=006,id=hostusb0 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.xml b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.xml new file mode 100644 index 0000000000..61bb2a2b2a --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-hostdev-usb-address-device.xml @@ -0,0 +1,27 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219200 + 219200 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu + + + + + + +
+ + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 8c88a7921f..2042e2a758 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -299,6 +299,7 @@ mymain(int argc, char **argv) DO_TEST("hostdev-usb-product", 0); DO_TEST("hostdev-usb-address", 0); + DO_TEST("hostdev-usb-address-device", QEMUD_CMD_FLAG_DEVICE); DO_TEST("hostdev-pci-address", QEMUD_CMD_FLAG_PCIDEVICE); DO_TEST_FULL("restore-v1", QEMUD_CMD_FLAG_MIGRATE_KVM_STDIO, "stdio"); -- 2.39.5