Assigning a PCI address needs to also assign any extension addresses
right away. Otherwise they'd be assigned only after subsequent
format->parse cycle and thus be potentially missing on first run after
defining the VM and thus could change.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
src/qemu/qemu_domain_address.c | 14 ++++++++++----
.../hostdev-vfio-zpci-boundaries.s390x-latest.xml | 4 +++-
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 099778b2a8..979bc8a9fd 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -2829,10 +2829,16 @@ qemuDomainAssignPCIAddresses(virDomainDef *def,
* controllers don't plug into any other PCI controller, hence
* they should skip this step */
if (bus->model != VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT &&
- bus->model != VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT &&
- qemuDomainPCIAddressReserveNextAddr(addrs,
- &dev.data.controller->info)
< 0) {
- goto cleanup;
+ bus->model != VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT) {
+ if (qemuDomainPCIAddressReserveNextAddr(addrs,
+
&dev.data.controller->info) < 0)
+ goto cleanup;
+
+ if (qemuDomainFillDevicePCIExtensionFlagsIter(NULL, &dev,
&dev.data.controller->info, qemuCaps) < 0)
+ goto cleanup;
+
+ if (qemuDomainAssignPCIAddressExtension(NULL, NULL,
&dev.data.controller->info, addrs) < 0)
+ goto cleanup;
}
}
diff --git a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.s390x-latest.xml
b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.s390x-latest.xml
index 8b0044af1c..6a4cf53313 100644
--- a/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.s390x-latest.xml
+++ b/tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.s390x-latest.xml
@@ -21,7 +21,9 @@
<controller type='pci' index='1' model='pci-bridge'>
<model name='pci-bridge'/>
<target chassisNr='1'/>
- <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x0'/>
+ <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x0'>
+ <zpci uid='0x0002' fid='0x00000001'/>
+ </address>
</controller>
<audio id='1' type='none'/>
<hostdev mode='subsystem' type='pci' managed='no'>
--
2.43.0