qemuDomainAssignDevicePCISlots() blindly sets the HOTPLUGGABLE flag
for all devices, even though only a subset of devices actually support
hotplugging. In particular, these devices do support hotplug:
<interface>
<hostdev>
<rng>
<serial>
<disk> (only virtio)
<controller> (SCSI controllers only)
and these devices don't support hotplug:
<filesystem>
<sound>
<balloon>
<watchdog>
<video>
<shmem>
<input>
By turning off the HOTPLUGGABLE flag for the devices that couldn't be
hotplugged anyway, we can convince libvirt to auto-assign them to
pcie-root (which doesn't support hotplug, but *does* allow both PCIe
and legacy PCI devices).
---
src/qemu/qemu_domain_address.c | 67 +++++++++++++++++++---
tests/qemuxml2argvdata/qemuxml2argv-autoindex.args | 22 +++----
.../qemuxml2argv-bios-nvram-secure.args | 2 +-
.../qemuxml2argv-machine-smm-opt.args | 2 +-
.../qemuxml2argv-q35-hotpluggable.args | 6 +-
.../qemuxml2argv-q35-pm-disable-fallback.args | 3 +-
.../qemuxml2argv-q35-pm-disable.args | 3 +-
.../qemuxml2argv-q35-usb2-multi.args | 10 ++--
.../qemuxml2argv-q35-usb2-reorder.args | 10 ++--
.../qemuxml2xmlout-autoindex.xml | 18 +++---
.../qemuxml2xmlout-q35-hotpluggable.xml | 6 +-
.../qemuxml2xmlout-q35-usb2-multi.xml | 8 +--
.../qemuxml2xmlout-q35-usb2-reorder.xml | 8 +--
13 files changed, 108 insertions(+), 57 deletions(-)
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 3d52d72..87a1268 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -1021,19 +1021,16 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
}
}
- /* all other devices that plug into a PCI slot are treated as a
- * PCI endpoint devices that require a hotplug-capable slot
- * (except for some special cases which have specific handling
- * below)
- */
- flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
-
for (i = 0; i < def->nfss; i++) {
if (!virDeviceInfoPCIAddressWanted(&def->fss[i]->info))
continue;
/* Only support VirtIO-9p-pci so far. If that changes,
* we might need to skip devices here */
+
+ /* <filesystem> devices are not hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->fss[i]->info,
flags) < 0)
goto error;
@@ -1049,6 +1046,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
!virDeviceInfoPCIAddressWanted(&def->nets[i]->info)) {
continue;
}
+ /* most <interface> devices are hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->nets[i]->info,
flags) < 0)
goto error;
@@ -1064,6 +1064,8 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
def->sounds[i]->model == VIR_DOMAIN_SOUND_MODEL_USB)
continue;
+ /* <sound> devices are not hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
if (virDomainPCIAddressReserveNextSlot(addrs, &def->sounds[i]->info,
flags) < 0)
goto error;
@@ -1129,6 +1131,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
break;
}
+ /* USB2 controllers not hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (!foundAddr) {
/* This is the first part of the controller, so need
* to find a free slot & then reserve a function */
@@ -1142,6 +1147,7 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
addrs->lastaddr.function = 0;
addrs->lastaddr.multi = VIR_TRISTATE_SWITCH_ABSENT;
}
+
/* Finally we can reserve the slot+function */
if (virDomainPCIAddressReserveAddr(addrs, &addr, flags,
false, foundAddr) < 0)
@@ -1150,6 +1156,19 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
def->controllers[i]->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI;
def->controllers[i]->info.addr.pci = addr;
} else {
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+ /* USB3 (nec-xhci) controllers can be either PCIe or
+ * legacy PCI, depending on the type of controller they
+ * are plugged into.
+ */
+ if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_USB
&&
+ def->controllers[i]->model ==
VIR_DOMAIN_CONTROLLER_MODEL_USB_NEC_XHCI)
+ flags |= VIR_PCI_CONNECT_TYPE_PCIE_DEVICE;
+
+ /* SCSI controllers can be hot plugged. All others can't */
+ if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI)
+ flags |= VIR_PCI_CONNECT_HOTPLUGGABLE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
&def->controllers[i]->info,
flags) < 0)
@@ -1184,6 +1203,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
goto error;
}
+ /* <disk> devices are hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->disks[i]->info,
flags) < 0)
goto error;
@@ -1197,6 +1219,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
def->hostdevs[i]->source.subsys.type !=
VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
continue;
+ /* <hostdev> devices are hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
def->hostdevs[i]->info,
flags) < 0)
@@ -1207,6 +1232,10 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
if (def->memballoon &&
def->memballoon->model == VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO &&
virDeviceInfoPCIAddressWanted(&def->memballoon->info)) {
+
+ /* <balloon> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
&def->memballoon->info,
flags) < 0)
@@ -1219,6 +1248,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
!virDeviceInfoPCIAddressWanted(&def->rngs[i]->info))
continue;
+ /* <rng> devices are hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
&def->rngs[i]->info, flags) <
0)
goto error;
@@ -1228,6 +1260,10 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
if (def->watchdog &&
def->watchdog->model == VIR_DOMAIN_WATCHDOG_MODEL_I6300ESB &&
virDeviceInfoPCIAddressWanted(&def->watchdog->info)) {
+
+ /* <hostdev> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->watchdog->info,
flags) < 0)
goto error;
@@ -1237,6 +1273,10 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
* assigned address. */
if (def->nvideos > 0 &&
virDeviceInfoPCIAddressWanted(&def->videos[0]->info)) {
+
+ /* <video> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->videos[0]->info,
flags) < 0)
goto error;
@@ -1251,6 +1291,10 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
}
if (!virDeviceInfoPCIAddressWanted(&def->videos[i]->info))
continue;
+
+ /* <video> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &def->videos[i]->info,
flags) < 0)
goto error;
@@ -1261,6 +1305,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
if (!virDeviceInfoPCIAddressWanted(&def->shmems[i]->info))
continue;
+ /* <shmem> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
&def->shmems[i]->info, flags)
< 0)
goto error;
@@ -1270,6 +1317,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
!virDeviceInfoPCIAddressWanted(&def->inputs[i]->info))
continue;
+ /* <input> devices are NOT hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs,
&def->inputs[i]->info, flags)
< 0)
goto error;
@@ -1284,6 +1334,9 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def,
!virDeviceInfoPCIAddressWanted(&chr->info))
continue;
+ /* <serial> devices are hotpluggable, legacy PCI */
+ flags = VIR_PCI_CONNECT_HOTPLUGGABLE | VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
+
if (virDomainPCIAddressReserveNextSlot(addrs, &chr->info, flags) < 0)
goto error;
}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args
b/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args
index 43b9661..cddf7a0 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-autoindex.args
@@ -38,16 +38,16 @@ addr=0x1d \
-device ich9-usb-ehci1,id=usb1,bus=pcie.0,addr=0x1a.0x7 \
-device ich9-usb-uhci1,masterbus=usb1.0,firstport=0,bus=pcie.0,\
multifunction=on,addr=0x1a \
--device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.2,multifunction=on,\
-addr=0x1 \
--device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.2,addr=0x1.0x1 \
--device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.2,addr=0x1.0x2 \
--device ich9-usb-ehci1,id=usb2,bus=pci.2,addr=0x1.0x7 \
--device nec-usb-xhci,id=usb3,bus=pci.2,addr=0x2 \
--device ich9-usb-uhci1,masterbus=usb4.0,firstport=0,bus=pci.2,multifunction=on,\
-addr=0x3 \
--device ich9-usb-uhci2,masterbus=usb4.0,firstport=2,bus=pci.2,addr=0x3.0x1 \
--device ich9-usb-uhci3,masterbus=usb4.0,firstport=4,bus=pci.2,addr=0x3.0x2 \
--device ich9-usb-ehci1,id=usb4,bus=pci.2,addr=0x3.0x7 \
+-device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pcie.0,\
+multifunction=on,addr=0x4 \
+-device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pcie.0,addr=0x4.0x1 \
+-device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pcie.0,addr=0x4.0x2 \
+-device ich9-usb-ehci1,id=usb2,bus=pcie.0,addr=0x4.0x7 \
+-device nec-usb-xhci,id=usb3,bus=pcie.0,addr=0x3 \
+-device ich9-usb-uhci1,masterbus=usb4.0,firstport=0,bus=pcie.0,\
+multifunction=on,addr=0x6 \
+-device ich9-usb-uhci2,masterbus=usb4.0,firstport=2,bus=pcie.0,addr=0x6.0x1 \
+-device ich9-usb-uhci3,masterbus=usb4.0,firstport=4,bus=pcie.0,addr=0x6.0x2 \
+-device ich9-usb-ehci1,id=usb4,bus=pcie.0,addr=0x6.0x7 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-sata0-0-0 \
-device ide-drive,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args
b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args
index c014254..93d62a7 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-bios-nvram-secure.args
@@ -26,4 +26,4 @@ readonly=on \
-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\
drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \
-serial pty \
--device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x2
+-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x2
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args
b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args
index e49d7e9..05738c1 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-machine-smm-opt.args
@@ -22,4 +22,4 @@ QEMU_AUDIO_DRV=none \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-scsi0-0-0-0 \
-device scsi-disk,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\
drive=drive-scsi0-0-0-0,id=scsi0-0-0-0 \
--device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x2
+-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x2
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-hotpluggable.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-hotpluggable.args
index 0020bfe..c3368ae 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-hotpluggable.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-hotpluggable.args
@@ -43,8 +43,8 @@ addr=0x3 \
-vga qxl \
-global qxl-vga.ram_size=67108864 \
-global qxl-vga.vram_size=33554432 \
--device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x4 \
+-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x5 \
-object rng-random,id=objrng0,filename=/dev/random \
--device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x5 \
+-device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x6 \
-object rng-random,id=objrng1,filename=/dev/random \
--device virtio-rng-pci,rng=objrng1,id=rng1,bus=pci.2,addr=0x5
+-device virtio-rng-pci,rng=objrng1,id=rng1,bus=pci.2,addr=0x4
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args
index deae687..31a1d71 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable-fallback.args
@@ -19,5 +19,4 @@ QEMU_AUDIO_DRV=none \
-global PIIX4_PM.disable_s4=1 \
-boot n \
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \
--device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \
--device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x1
+-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x2
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args
index 871340f..f0dda09 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pm-disable.args
@@ -19,5 +19,4 @@ QEMU_AUDIO_DRV=none \
-global ICH9-LPC.disable_s4=1 \
-boot n \
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x1e \
--device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x0 \
--device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x1
+-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x2
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args
index d465c69..9d2875d 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-multi.args
@@ -28,11 +28,11 @@ addr=0x1d \
multifunction=on,addr=0x1a \
-device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pcie.0,addr=0x1a.0x1 \
-device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pcie.0,addr=0x1a.0x2 \
--device ich9-usb-ehci1,id=usb2,bus=pci.2,addr=0x1.0x7 \
--device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.2,multifunction=on,\
-addr=0x1 \
--device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.2,addr=0x1.0x1 \
--device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.2,addr=0x1.0x2 \
+-device ich9-usb-ehci1,id=usb2,bus=pcie.0,addr=0x3.0x7 \
+-device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pcie.0,\
+multifunction=on,addr=0x3 \
+-device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pcie.0,addr=0x3.0x1 \
+-device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pcie.0,addr=0x3.0x2 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-sata0-0-0 \
-device ide-drive,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0 \
-vga qxl \
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args
index 87d2ce7..a915b76 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args
+++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-usb2-reorder.args
@@ -28,11 +28,11 @@ addr=0x1d \
multifunction=on,addr=0x1a \
-device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pcie.0,addr=0x1a.0x2 \
-device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pcie.0,addr=0x1a.0x1 \
--device ich9-usb-ehci1,id=usb2,bus=pci.2,addr=0x1.0x7 \
--device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.2,addr=0x1.0x2 \
--device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.2,addr=0x1.0x1 \
--device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.2,multifunction=on,\
-addr=0x1 \
+-device ich9-usb-ehci1,id=usb2,bus=pcie.0,addr=0x3.0x7 \
+-device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pcie.0,addr=0x3.0x2 \
+-device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pcie.0,addr=0x3.0x1 \
+-device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pcie.0,\
+multifunction=on,addr=0x3 \
-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-sata0-0-0 \
-device ide-drive,bus=ide.0,drive=drive-sata0-0-0,id=sata0-0-0 \
-vga qxl \
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-autoindex.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-autoindex.xml
index 086a1cf..0502b36 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-autoindex.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-autoindex.xml
@@ -112,36 +112,36 @@
</controller>
<controller type='usb' index='2' model='ich9-uhci1'>
<master startport='0'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x0' multifunction='on'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci2'>
<master startport='2'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x1'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x1'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci3'>
<master startport='4'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x2'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x2'/>
</controller>
<controller type='usb' index='2' model='ich9-ehci1'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x7'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x7'/>
</controller>
<controller type='usb' index='3' model='nec-xhci'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x02' function='0x0'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
</controller>
<controller type='usb' index='4' model='ich9-uhci1'>
<master startport='0'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x03' function='0x0' multifunction='on'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='4' model='ich9-uhci2'>
<master startport='2'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x03' function='0x1'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x1'/>
</controller>
<controller type='usb' index='4' model='ich9-uhci3'>
<master startport='4'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x03' function='0x2'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x2'/>
</controller>
<controller type='usb' index='4' model='ich9-ehci1'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x03' function='0x7'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x7'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1f' function='0x2'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-hotpluggable.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-hotpluggable.xml
index e771125..18ea795 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-hotpluggable.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-hotpluggable.xml
@@ -87,17 +87,17 @@
<address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x0'/>
</video>
<memballoon model='virtio'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x04' function='0x0'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
</memballoon>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<hotplug require='no'/>
- <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
</rng>
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
<hotplug require='yes'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x05' function='0x0'/>
+ <address type='pci' domain='0x0000' bus='0x02'
slot='0x04' function='0x0'/>
</rng>
</devices>
</domain>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-multi.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-multi.xml
index 06c0699..74b345d 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-multi.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-multi.xml
@@ -60,19 +60,19 @@
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1a' function='0x2'/>
</controller>
<controller type='usb' index='2' model='ich9-ehci1'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x7'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x7'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci1'>
<master startport='0'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x0' multifunction='on'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci2'>
<master startport='2'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x1'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x1'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci3'>
<master startport='4'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x2'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x2'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1f' function='0x2'/>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-reorder.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-reorder.xml
index 1007095..6ac275f 100644
--- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-reorder.xml
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-usb2-reorder.xml
@@ -60,19 +60,19 @@
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1a' function='0x1'/>
</controller>
<controller type='usb' index='2' model='ich9-ehci1'>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x7'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x7'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci3'>
<master startport='4'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x2'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x2'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci2'>
<master startport='2'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x1'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x1'/>
</controller>
<controller type='usb' index='2' model='ich9-uhci1'>
<master startport='0'/>
- <address type='pci' domain='0x0000' bus='0x02'
slot='0x01' function='0x0' multifunction='on'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0' multifunction='on'/>
</controller>
<controller type='sata' index='0'>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x1f' function='0x2'/>
--
2.7.4