]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: assign USB port on a selected hub for all devices
authorJán Tomko <jtomko@redhat.com>
Fri, 27 Jan 2017 17:08:22 +0000 (18:08 +0100)
committerJán Tomko <jtomko@redhat.com>
Mon, 13 Feb 2017 08:46:15 +0000 (09:46 +0100)
Due to a logic error, the autofilling of USB port when a bus is
specified:
    <address type='usb' bus='0'/>
does not work for non-hub devices on domain startup.

Fix the logic in qemuDomainAssignUSBPortsIterator to also
assign ports for USB addresses that do not yet have one.

https://bugzilla.redhat.com/show_bug.cgi?id=1374128

src/qemu/qemu_domain_address.c
tests/qemuxml2argvdata/qemuxml2argv-usb-port-missing.args

index 70482f22405d65118a9fa64281845cf5cdc75481..5b75044cec4e46346bfb2b8c3fb0c7ef3c3203d1 100644 (file)
@@ -2238,7 +2238,12 @@ qemuDomainAssignUSBPortsIterator(virDomainDeviceInfoPtr info,
 {
     struct qemuAssignUSBIteratorInfo *data = opaque;
 
-    if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE)
+    if (info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+        info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB)
+        return 0;
+
+    if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB &&
+        virDomainUSBAddressPortIsValid(info->addr.usb.port))
         return 0;
 
     return virDomainUSBAddressAssign(data->addrs, info);
index ff743c89758f5ed206fc5d79b2ca56659ade55f3..fbb328e114bffc4d62abc737489ac18ba6cb08de 100644 (file)
@@ -22,5 +22,5 @@ server,nowait \
 -usb \
 -device usb-hub,id=hub0,bus=usb.0,port=1 \
 -device usb-hub,id=hub1,bus=usb.0,port=2 \
--device usb-mouse,id=input0,bus=usb.0 \
+-device usb-mouse,id=input0,bus=usb.0,port=1.1 \
 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3