QEMU uses USB bus name "usb.0" when using the legacy -usb argument.
If we want to allow USB devices to specify their addresses with legacy
-usb, we should either in case of legacy bus name drop the 0 from the
address bus, or just drop the 0 from device id. This patch does the
later.
Another solution would be to permit addressing on non-legacy USB
controllers only.
---
src/qemu/qemu_command.c | 21 +++++++++++++++----
.../qemuxml2argv-usb-ich9-companion.args | 8 +++---
.../qemuxml2argv-usb-ich9-ehci-addr.args | 2 +-
.../qemuxml2argv-usb-piix3-controller.args | 2 +-
4 files changed, 22 insertions(+), 11 deletions(-)
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index d25f34f..c424ec1 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -1288,6 +1288,14 @@ error:
return -1;
}
+static void
+qemuUsbId(virBufferPtr buf, int idx)
+{
+ if (idx == 0)
+ virBufferAsprintf(buf, "usb");
+ else
+ virBufferAsprintf(buf, "usb%d", idx);
+}
static int
qemuBuildDeviceAddressStr(virBufferPtr buf,
@@ -1337,8 +1345,9 @@ qemuBuildDeviceAddressStr(virBufferPtr buf,
else
virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot);
} else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) {
- virBufferAsprintf(buf, ",bus=usb%d.0", info->addr.usb.bus);
- virBufferAsprintf(buf, ",port=%s", info->addr.usb.port);
+ virBufferAsprintf(buf, ",bus=");
+ qemuUsbId(buf, info->addr.usb.bus);
+ virBufferAsprintf(buf, ".0,port=%s", info->addr.usb.port);
}
return 0;
@@ -1768,11 +1777,13 @@ qemuBuildUSBControllerDevStr(virDomainControllerDefPtr def,
return -1;
}
- virBufferAsprintf(buf, "%s,id=usb%d", smodel, def->idx);
+ virBufferAsprintf(buf, "%s,id=", smodel);
+ qemuUsbId(buf, def->idx);
if (def->info.mastertype == VIR_DOMAIN_CONTROLLER_MASTER_USB) {
- virBufferAsprintf(buf, ",masterbus=usb%d.0,firstport=%d",
- def->info.master.usb.bus,
def->info.master.usb.startport);
+ virBufferAsprintf(buf, ",masterbus=");
+ qemuUsbId(buf, def->info.master.usb.bus);
+ virBufferAsprintf(buf, ".0,firstport=%d",
def->info.master.usb.startport);
}
return 0;
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args
b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args
index d5a2e08..80ca5ce 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args
@@ -1,6 +1,6 @@
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \
--device ich9-usb-ehci1,id=usb0,bus=pci.0,multifunction=on,addr=0x4.0x7 \
--device
ich9-usb-uhci1,id=usb1,masterbus=usb0.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0
\
--device
ich9-usb-uhci2,id=usb2,masterbus=usb0.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1
\
--device
ich9-usb-uhci3,id=usb3,masterbus=usb0.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2
\
+-device ich9-usb-ehci1,id=usb,bus=pci.0,multifunction=on,addr=0x4.0x7 \
+-device
ich9-usb-uhci1,id=usb1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0
\
+-device
ich9-usb-uhci2,id=usb2,masterbus=usb.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1
\
+-device
ich9-usb-uhci3,id=usb3,masterbus=usb.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2
\
-device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args
b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args
index 502244d..0059ab5 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device
ich9-usb-ehci1,id=usb0,bus=pci.0,multifunction=on,addr=0x4.0x7 -device
virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device
ich9-usb-ehci1,id=usb,bus=pci.0,multifunction=on,addr=0x4.0x7 -device
virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args
b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args
index 799b75f..c4573ea 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args
@@ -1 +1 @@
-LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device
piix3-usb-uhci,id=usb0,bus=pci.0,addr=0x3 -device
virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214
-smp 1 -nographic -nodefconfig -nodefaults -chardev
socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon
chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device
piix3-usb-uhci,id=usb,bus=pci.0,addr=0x3 -device
virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
--
1.7.6