diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 49a2c09636..593adcbacc 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1118,10 +1118,14 @@ The type attribute is mandatory, and is typically "pci" or "drive". For a "pci" controller, additional attributes for bus, slot, - and function must be present, as well as an - optional domain. For a "drive" controller, - additional attributes controller, bus, + and function must be present, as well as + optional domain and multifunction. + Multifunction defaults to 'off'; any other value requires + QEMU 0.1.3 and libvirt 0.9.7. For a + "drive" controller, additional attributes + controller, bus, and unit are available, each defaulting to 0. + @@ -1298,7 +1302,7 @@ </controller> <controller type='usb' index='0' model='ich9-uhci1'> <master startport='0'/> - <address type='pci' domain='0' bus='0' slot='4' function='0'/> + <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/> </controller> ... </devices> @@ -1431,10 +1435,16 @@ with virsh nodedev-list. The bus attribute allows the hexadecimal values 0 to ff, the slot attribute allows the hexadecimal values 0 to 1f, and - the function attribute allows the hexadecimal values 0 to - 7. There is also an optional domain attribute for the - PCI domain, with hexadecimal values 0 to ffff, but it is currently - not used by qemu. + the function attribute allows the hexadecimal values 0 to 7. + The multifunction attribute controls turning on the + multifunction bit for a particular slot/function in the PCI + control registersince 0.9.7, requires QEMU + 0.13. multifunction defaults to 'off', but + should be set to 'on' for function 0 of a slot that will have + multiple functions used. + There is also an optional domain attribute for + the PCI domain, with hexadecimal values 0 to ffff, but it is + currently not used by qemu.

Redirected devices

@@ -1602,7 +1612,8 @@ the interface to a particular pci slot, with attribute type='pci' and additional attributes domain, bus, slot, - and function as appropriate. + function, and multifunction + since 0.9.7, requires QEMU 0.13 as appropriate.

Virtual network
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 4972fac0b2..cffaac2fe7 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -2118,6 +2118,14 @@ + + + + on + off + + + diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c14198271b..6fb188878e 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -138,6 +138,12 @@ VIR_ENUM_IMPL(virDomainDeviceAddress, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST, "ccid", "usb") +VIR_ENUM_IMPL(virDomainDeviceAddressPciMulti, + VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST, + "default", + "on", + "off") + VIR_ENUM_IMPL(virDomainDisk, VIR_DOMAIN_DISK_TYPE_LAST, "block", "file", @@ -1652,6 +1658,10 @@ virDomainDeviceInfoFormat(virBufferPtr buf, info->addr.pci.bus, info->addr.pci.slot, info->addr.pci.function); + if (info->addr.pci.multi) { + virBufferAsprintf(buf, " multifunction='%s'", + virDomainDeviceAddressPciMultiTypeToString(info->addr.pci.multi)); + } break; case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: @@ -1696,7 +1706,7 @@ static int virDomainDevicePCIAddressParseXML(xmlNodePtr node, virDomainDevicePCIAddressPtr addr) { - char *domain, *slot, *bus, *function; + char *domain, *slot, *bus, *function, *multi; int ret = -1; memset(addr, 0, sizeof(*addr)); @@ -1705,6 +1715,7 @@ virDomainDevicePCIAddressParseXML(xmlNodePtr node, bus = virXMLPropString(node, "bus"); slot = virXMLPropString(node, "slot"); function = virXMLPropString(node, "function"); + multi = virXMLPropString(node, "multifunction"); if (domain && virStrToLong_ui(domain, NULL, 0, &addr->domain) < 0) { @@ -1734,6 +1745,14 @@ virDomainDevicePCIAddressParseXML(xmlNodePtr node, goto cleanup; } + if (multi && + ((addr->multi = virDomainDeviceAddressPciMultiTypeFromString(multi)) <= 0)) { + virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Unknown value '%s' for
'multifunction' attribute"), + multi); + goto cleanup; + + } if (!virDomainDevicePCIAddressIsValid(addr)) { virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Insufficient specification for PCI address")); @@ -1747,6 +1766,7 @@ cleanup: VIR_FREE(bus); VIR_FREE(slot); VIR_FREE(function); + VIR_FREE(multi); return ret; } diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 4a99ea4246..bc41d34d62 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -74,6 +74,14 @@ enum virDomainDeviceAddressType { VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST }; +enum virDomainDeviceAddressPciMulti { + VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_DEFAULT = 0, + VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON, + VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF, + + VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST +}; + typedef struct _virDomainDevicePCIAddress virDomainDevicePCIAddress; typedef virDomainDevicePCIAddress *virDomainDevicePCIAddressPtr; struct _virDomainDevicePCIAddress { @@ -81,6 +89,7 @@ struct _virDomainDevicePCIAddress { unsigned int bus; unsigned int slot; unsigned int function; + int multi; /* enum virDomainDeviceAddressPciMulti */ }; typedef struct _virDomainDeviceDriveAddress virDomainDeviceDriveAddress; @@ -1830,6 +1839,7 @@ VIR_ENUM_DECL(virDomainLifecycle) VIR_ENUM_DECL(virDomainLifecycleCrash) VIR_ENUM_DECL(virDomainDevice) VIR_ENUM_DECL(virDomainDeviceAddress) +VIR_ENUM_DECL(virDomainDeviceAddressPciMulti) VIR_ENUM_DECL(virDomainDisk) VIR_ENUM_DECL(virDomainDiskDevice) VIR_ENUM_DECL(virDomainDiskBus) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index c2a3fab277..1ac486fb5a 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -269,6 +269,8 @@ virDomainDefParseNode; virDomainDefParseString; virDomainDeleteConfig; virDomainDeviceAddressIsValid; +virDomainDeviceAddressPciMultiTypeFromString; +virDomainDeviceAddressPciMultiTypeToString; virDomainDeviceAddressTypeToString; virDomainDeviceDefFree; virDomainDeviceDefParse; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a13ba71919..ff83e2d608 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -774,22 +774,65 @@ static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, virDomainDeviceInfoPtr dev, void *opaque) { + int ret = -1; + char *addr = NULL; qemuDomainPCIAddressSetPtr addrs = opaque; - if (dev->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - char *addr = qemuPCIAddressAsString(dev); - if (!addr) - return -1; + if (dev->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) + return 0; - VIR_DEBUG("Remembering PCI addr %s", addr); + addr = qemuPCIAddressAsString(dev); + if (!addr) + goto cleanup; - if (virHashAddEntry(addrs->used, addr, addr) < 0) { - VIR_FREE(addr); - return -1; + if (virHashLookup(addrs->used, addr)) { + if (dev->addr.pci.function != 0) { + qemuReportError(VIR_ERR_XML_ERROR, + _("Attempted double use of PCI Address '%s' " + "(may need \"multifunction='on'\" for device on function 0"), + addr); + } else { + qemuReportError(VIR_ERR_XML_ERROR, + _("Attempted double use of PCI Address '%s'"), addr); } + goto cleanup; } - return 0; + VIR_DEBUG("Remembering PCI addr %s", addr); + if (virHashAddEntry(addrs->used, addr, addr) < 0) + goto cleanup; + addr = NULL; + + if ((dev->addr.pci.function == 0) && + (dev->addr.pci.multi != VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON)) { + /* a function 0 w/o multifunction=on must reserve the entire slot */ + int function; + virDomainDeviceInfo temp_dev = *dev; + + for (function = 1; function < QEMU_PCI_ADDRESS_LAST_FUNCTION; function++) { + temp_dev.addr.pci.function = function; + addr = qemuPCIAddressAsString(&temp_dev); + if (!addr) + goto cleanup; + + if (virHashLookup(addrs->used, addr)) { + qemuReportError(VIR_ERR_XML_ERROR, + _("Attempted double use of PCI Address '%s'" + "(need \"multifunction='off'\" for device on function 0)"), + addr); + goto cleanup; + } + + VIR_DEBUG("Remembering PCI addr %s (multifunction=off for function 0)", addr); + if (virHashAddEntry(addrs->used, addr, addr)) + goto cleanup; + addr = NULL; + } + } + ret = 0; +cleanup: + VIR_FREE(addr); + return ret; } @@ -1376,7 +1419,13 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, if (info->addr.pci.function != 0) { qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Only PCI device addresses with function=0 " - "are supported")); + "are supported with this QEMU binary")); + return -1; + } + if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON) { + qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("'multifunction=on' is not supported with " + "this QEMU binary")); return -1; } } @@ -1391,11 +1440,13 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, virBufferAsprintf(buf, ",bus=pci.0"); else virBufferAsprintf(buf, ",bus=pci"); - if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_MULTIFUNCTION)) - virBufferAsprintf(buf, ",multifunction=on,addr=0x%x.0x%x", - info->addr.pci.slot, info->addr.pci.function); - else - virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot); + if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON) + virBufferAddLit(buf, ",multifunction=on"); + else if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF) + virBufferAddLit(buf, ",multifunction=off"); + virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot); + if (info->addr.pci.function != 0) + virBufferAsprintf(buf, ".0x%x", info->addr.pci.function); } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { virBufferAsprintf(buf, ",bus="); qemuUsbId(buf, info->addr.usb.bus); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args index ff229f2f59..8a2150eaed 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args @@ -1,15 +1,15 @@ 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 \ -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \ --device lsi,id=scsi0,bus=pci.0,multifunction=on,addr=0x3.0x0 \ --device lsi,id=scsi1,bus=pci.0,multifunction=on,addr=0x4.0x0 \ +-device lsi,id=scsi0,bus=pci.0,multifunction=off,addr=0x3 \ +-device lsi,id=scsi1,bus=pci.0,multifunction=on,addr=0x4 \ -device lsi,id=scsi2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ --device lsi,id=scsi3,bus=pci.0,multifunction=on,addr=0x4.0x2 \ --device lsi,id=scsi4,bus=pci.0,multifunction=on,addr=0x4.0x3 \ --device lsi,id=scsi5,bus=pci.0,multifunction=on,addr=0x4.0x4 \ --device lsi,id=scsi6,bus=pci.0,multifunction=on,addr=0x4.0x5 \ --device lsi,id=scsi7,bus=pci.0,multifunction=on,addr=0x4.0x6 \ --device lsi,id=scsi8,bus=pci.0,multifunction=on,addr=0x4.0x7 \ +-device lsi,id=scsi3,bus=pci.0,addr=0x4.0x2 \ +-device lsi,id=scsi4,bus=pci.0,addr=0x4.0x3 \ +-device lsi,id=scsi5,bus=pci.0,addr=0x4.0x4 \ +-device lsi,id=scsi6,bus=pci.0,addr=0x4.0x5 \ +-device lsi,id=scsi7,bus=pci.0,addr=0x4.0x6 \ +-device lsi,id=scsi8,bus=pci.0,addr=0x4.0x7 \ -drive file=/tmp/scsidisk.img,if=none,id=drive-scsi0-0-0 \ -device scsi-disk,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 \ --usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x5.0x0 +-usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml index 672fb6119a..24b95b8933 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml @@ -20,13 +20,13 @@
-
+
-
+
-
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args index 1007544837..080d483b87 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args @@ -1,6 +1,9 @@ -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 ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ --device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ --device ich9-usb-uhci3,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 +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,addr=0x4.0x7 \ +-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ +-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ +-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml index 05a6adf6ef..5a43638be7 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml @@ -15,7 +15,7 @@ -
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args index 0059ab5905..babd4f804a 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args @@ -1 +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=usb,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,addr=0x4.0x7 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args index 06863bbde4..1b2d5c1e28 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args @@ -1 +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 piix3-usb-uhci,id=usb,bus=pci.0,multifunction=on,addr=0x1.0x2 -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 piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args index f6270d504b..7d34c2a076 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args @@ -1,10 +1,10 @@ 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 ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ --device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ --device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2 \ +-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \ +-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ +-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ +-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ -chardev socket,id=charredir0,host=localhost,port=4000 \ -device usb-redir,chardev=charredir0,id=redir0 \ -chardev spicevmc,id=charredir1,name=usbredir \ -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \ --device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml index 1dac3fbc93..a359a3d413 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml @@ -19,7 +19,7 @@ -
+
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args index be4a78e3a4..0a61af5622 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args @@ -1,15 +1,18 @@ -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,multifunction=on,addr=0x1.0x2 \ --device ich9-usb-ehci1,id=usb1,bus=pci.0,multifunction=on,addr=0x4.0x7 \ --device ich9-usb-uhci1,masterbus=usb1.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ --device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ --device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2 \ --device ich9-usb-ehci1,id=usb2,bus=pci.0,multifunction=on,addr=0x5.0x7 \ --device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5.0x0 \ --device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.0,multifunction=on,addr=0x5.0x1 \ --device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.0,multifunction=on,addr=0x5.0x2 \ +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=0x1.0x2 \ +-device ich9-usb-ehci1,id=usb1,bus=pci.0,addr=0x4.0x7 \ +-device ich9-usb-uhci1,masterbus=usb1.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ +-device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ +-device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ +-device ich9-usb-ehci1,id=usb2,bus=pci.0,addr=0x5.0x7 \ +-device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \ +-device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.0,addr=0x5.0x1 \ +-device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.0,addr=0x5.0x2 \ -device usb-hub,id=hub0,bus=usb1.0,port=1 \ -device usb-tablet,id=input0,bus=usb.0,port=2 \ -device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bus=usb2.0,port=1 \ -device usb-host,hostbus=14,hostaddr=7,id=hostdev1,bus=usb2.0,port=2 \ --device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 +-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml index e8ada4db0e..b12b841b21 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml @@ -21,7 +21,7 @@ -
+
@@ -37,7 +37,7 @@ -
+