On Tue, Jan 10, 2017 at 03:51:21PM -0500, Laine Stump wrote:
On 12/19/2016 10:23 AM, Laine Stump wrote:
> Set the VIR_PCI_CONNECT_AGGREGATE_SLOT flag for pcie-root-ports so
> that they will be assigned to all the functions on a slot.
>
> Some qemu test case outputs had to be adjusted due to the
> pcie-root-ports now being put on multiple functions.
> ---
ARGH!
In my final rebase before pushing, I pulled in Andrea's patches that switch
aarch64/virt to using PCI by default, and the test case for that resulted in
a make check failure:
564) QEMU XML-2-ARGV aarch64-virtio-pci-default ... libvirt: QEMU Driver
error : unsupported configuration: 'multifunction=on' is not supported with
this QEMU binary FAILED
Is it really true that the aarch64 qemu doesn't support multifunction
devices? If so, that really needs to be fixed. In the meantime, this means I
aarch64 qemu does support multifunction. It's been a while since I
experimented with it, but it worked when I did. Maybe just a make
check fix is needed?
Thanks,
drew
still can't push my patches, because doing so will break aarch64.
I'll try
to come up with a patch to conditionalize AGGREGATE_SLOT on support for
multifunction (which I suppose I should have done to begin with, but I
wouldn't have expected that a platform that supports PCIe doesn't support
multifunction devices :-/)
> src/conf/domain_addr.c | 2 +-
> .../qemuxml2argv-pcie-root-port.args | 5 +-
> .../qemuxml2argv-pcie-switch-upstream-port.args | 5 +-
> .../qemuxml2argv-q35-default-devices-only.args | 7 +--
> .../qemuxml2argv-q35-multifunction.args | 12 +++++
> .../qemuxml2argv-q35-multifunction.xml | 11 +++++
> .../qemuxml2argv-q35-pcie-autoadd.args | 30 ++++++------
> tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args | 28 ++++++-----
> .../qemuxml2argv-q35-virt-manager-basic.args | 13 ++---
> .../qemuxml2argv-q35-virtio-pci.args | 28 ++++++-----
> tests/qemuxml2argvtest.c | 2 +
> .../qemuxml2xmlout-pcie-root-port.xml | 2 +-
> .../qemuxml2xmlout-pcie-switch-upstream-port.xml | 4 +-
> .../qemuxml2xmlout-q35-default-devices-only.xml | 8 ++--
> .../qemuxml2xmlout-q35-multifunction.xml | 55 ++++++++++++++++++++++
> .../qemuxml2xmlout-q35-pcie-autoadd.xml | 52 ++++++++++----------
> .../qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml | 48 +++++++++----------
> .../qemuxml2xmlout-q35-virt-manager-basic.xml | 20 ++++----
> .../qemuxml2xmlout-q35-virtio-pci.xml | 48 +++++++++----------
> tests/qemuxml2xmltest.c | 2 +
> 20 files changed, 237 insertions(+), 145 deletions(-)
>
> diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
> index 18421e0..d60b1d9 100644
> --- a/src/conf/domain_addr.c
> +++ b/src/conf/domain_addr.c
> @@ -63,7 +63,7 @@
virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model)
> return VIR_PCI_CONNECT_TYPE_DMI_TO_PCI_BRIDGE;
> case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT:
> - return VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT;
> + return VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT |
VIR_PCI_CONNECT_AGGREGATE_SLOT;
> case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT:
> return VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT;
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args
b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args
> index 27d5164..9a71281 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-root-port.args
> @@ -18,8 +18,9 @@ QEMU_AUDIO_DRV=none \
> -boot c \
> -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 ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x1a,chassis=40,id=pci.4,bus=pcie.0,addr=0x3 \
> +-device ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x1a,chassis=40,id=pci.4,bus=pcie.0,addr=0x2.0x1 \
> -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 \
> -device qxl-vga,id=video0,ram_size=67108864,vram_size=33554432,bus=pcie.0,\
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args
b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args
> index 93d16b8..10aedd5 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-switch-upstream-port.args
> @@ -18,8 +18,9 @@ QEMU_AUDIO_DRV=none \
> -boot c \
> -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 ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=4,id=pci.4,bus=pcie.0,addr=0x3 \
> +-device ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x11,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x1 \
> -device x3130-upstream,id=pci.5,bus=pci.3,addr=0x0 \
> -device x3130-upstream,id=pci.6,bus=pci.4,addr=0x0 \
> -drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-sata0-0-0 \
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-default-devices-only.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-default-devices-only.args
> index 9d13466..30fc9b7 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-default-devices-only.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-default-devices-only.args
> @@ -16,8 +16,9 @@ QEMU_AUDIO_DRV=none \
> -monitor unix:/tmp/lib/domain--1-q35-test/monitor.sock,server,nowait \
> -no-acpi \
> -boot c \
> --device ioh3420,port=0x8,chassis=1,id=pci.1,bus=pcie.0,addr=0x1 \
> --device ioh3420,port=0x10,chassis=2,id=pci.2,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=3,id=pci.3,bus=pcie.0,addr=0x3 \
> +-device ioh3420,port=0x8,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
> +addr=0x1 \
> +-device ioh3420,port=0x9,chassis=2,id=pci.2,bus=pcie.0,addr=0x1.0x1 \
> +-device ioh3420,port=0xa,chassis=3,id=pci.3,bus=pcie.0,addr=0x1.0x2 \
> -device nec-usb-xhci,id=usb,bus=pci.1,addr=0x0 \
> -device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x0
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.args
> index de1a4a4..1b60744 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.args
> @@ -27,5 +27,17 @@ addr=0x3.0x1 \
> -device ioh3420,port=0x20,chassis=6,id=pci.6,bus=pcie.0,multifunction=off,\
> addr=0x4 \
> -device ioh3420,port=0x21,chassis=7,id=pci.7,bus=pcie.0,addr=0x4.0x1 \
> +-device ioh3420,port=0x8,chassis=8,id=pci.8,bus=pcie.0,multifunction=on,\
> +addr=0x1 \
> +-device ioh3420,port=0x9,chassis=9,id=pci.9,bus=pcie.0,addr=0x1.0x1 \
> +-device ioh3420,port=0xa,chassis=10,id=pci.10,bus=pcie.0,addr=0x1.0x2 \
> +-device ioh3420,port=0xb,chassis=11,id=pci.11,bus=pcie.0,addr=0x1.0x3 \
> +-device ioh3420,port=0xc,chassis=12,id=pci.12,bus=pcie.0,addr=0x1.0x4 \
> +-device ioh3420,port=0xd,chassis=13,id=pci.13,bus=pcie.0,addr=0x1.0x5 \
> +-device ioh3420,port=0xe,chassis=14,id=pci.14,bus=pcie.0,addr=0x1.0x6 \
> +-device ioh3420,port=0xf,chassis=15,id=pci.15,bus=pcie.0,addr=0x1.0x7 \
> +-device ioh3420,port=0x13,chassis=16,id=pci.16,bus=pcie.0,addr=0x2.0x3 \
> +-device ioh3420,port=0x14,chassis=17,id=pci.17,bus=pcie.0,addr=0x2.0x4 \
> +-device ioh3420,port=0x15,chassis=18,id=pci.18,bus=pcie.0,addr=0x2.0x5 \
> -device nec-usb-xhci,id=usb,bus=pci.1,addr=0x0 \
> -device virtio-balloon-pci,id=balloon0,bus=pci.2,addr=0x0
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.xml
b/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.xml
> index b1f3c5e..c1edca1 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.xml
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-multifunction.xml
> @@ -36,5 +36,16 @@
> <controller type='pci' model='pcie-root-port'>
> <address type='pci' slot='4' function='1'/>
> </controller>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> + <controller type='pci' model='pcie-root-port'/>
> </devices>
> </domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie-autoadd.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie-autoadd.args
> index ba26326..f3d44c0 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie-autoadd.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie-autoadd.args
> @@ -16,20 +16,22 @@ QEMU_AUDIO_DRV=none \
> -monitor unix:/tmp/lib/domain--1-q35-test/monitor.sock,server,nowait \
> -no-acpi \
> -boot c \
> --device ioh3420,port=0x10,chassis=1,id=pci.1,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=2,id=pci.2,bus=pcie.0,addr=0x3 \
> --device ioh3420,port=0x20,chassis=3,id=pci.3,bus=pcie.0,addr=0x4 \
> --device ioh3420,port=0x28,chassis=4,id=pci.4,bus=pcie.0,addr=0x5 \
> --device ioh3420,port=0x30,chassis=5,id=pci.5,bus=pcie.0,addr=0x6 \
> --device ioh3420,port=0x38,chassis=6,id=pci.6,bus=pcie.0,addr=0x7 \
> --device ioh3420,port=0x40,chassis=7,id=pci.7,bus=pcie.0,addr=0x8 \
> --device ioh3420,port=0x48,chassis=8,id=pci.8,bus=pcie.0,addr=0x9 \
> --device ioh3420,port=0x50,chassis=9,id=pci.9,bus=pcie.0,addr=0xa \
> --device ioh3420,port=0x58,chassis=10,id=pci.10,bus=pcie.0,addr=0xb \
> --device ioh3420,port=0x60,chassis=11,id=pci.11,bus=pcie.0,addr=0xc \
> --device ioh3420,port=0x68,chassis=12,id=pci.12,bus=pcie.0,addr=0xd \
> --device ioh3420,port=0x70,chassis=13,id=pci.13,bus=pcie.0,addr=0xe \
> --device ioh3420,port=0x78,chassis=14,id=pci.14,bus=pcie.0,addr=0xf \
> +-device ioh3420,port=0x10,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x11,chassis=2,id=pci.2,bus=pcie.0,addr=0x2.0x1 \
> +-device ioh3420,port=0x12,chassis=3,id=pci.3,bus=pcie.0,addr=0x2.0x2 \
> +-device ioh3420,port=0x13,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x3 \
> +-device ioh3420,port=0x14,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x4 \
> +-device ioh3420,port=0x15,chassis=6,id=pci.6,bus=pcie.0,addr=0x2.0x5 \
> +-device ioh3420,port=0x16,chassis=7,id=pci.7,bus=pcie.0,addr=0x2.0x6 \
> +-device ioh3420,port=0x17,chassis=8,id=pci.8,bus=pcie.0,addr=0x2.0x7 \
> +-device ioh3420,port=0x18,chassis=9,id=pci.9,bus=pcie.0,multifunction=on,\
> +addr=0x3 \
> +-device ioh3420,port=0x19,chassis=10,id=pci.10,bus=pcie.0,addr=0x3.0x1 \
> +-device ioh3420,port=0x1a,chassis=11,id=pci.11,bus=pcie.0,addr=0x3.0x2 \
> +-device ioh3420,port=0x1b,chassis=12,id=pci.12,bus=pcie.0,addr=0x3.0x3 \
> +-device ioh3420,port=0x1c,chassis=13,id=pci.13,bus=pcie.0,addr=0x3.0x4 \
> +-device ioh3420,port=0x1d,chassis=14,id=pci.14,bus=pcie.0,addr=0x3.0x5 \
> -device nec-usb-xhci,id=usb,bus=pci.6,addr=0x0 \
> -device virtio-scsi-pci,id=scsi0,bus=pci.5,addr=0x0 \
> -device virtio-serial-pci,id=virtio-serial0,bus=pci.4,addr=0x0 \
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args
> index 2738749..3b507f3 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-pcie.args
> @@ -18,19 +18,21 @@ QEMU_AUDIO_DRV=none \
> -boot c \
> -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 ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=4,id=pci.4,bus=pcie.0,addr=0x3 \
> --device ioh3420,port=0x20,chassis=5,id=pci.5,bus=pcie.0,addr=0x4 \
> --device ioh3420,port=0x28,chassis=6,id=pci.6,bus=pcie.0,addr=0x5 \
> --device ioh3420,port=0x30,chassis=7,id=pci.7,bus=pcie.0,addr=0x6 \
> --device ioh3420,port=0x38,chassis=8,id=pci.8,bus=pcie.0,addr=0x7 \
> --device ioh3420,port=0x40,chassis=9,id=pci.9,bus=pcie.0,addr=0x8 \
> --device ioh3420,port=0x48,chassis=10,id=pci.10,bus=pcie.0,addr=0x9 \
> --device ioh3420,port=0x50,chassis=11,id=pci.11,bus=pcie.0,addr=0xa \
> --device ioh3420,port=0x58,chassis=12,id=pci.12,bus=pcie.0,addr=0xb \
> --device ioh3420,port=0x60,chassis=13,id=pci.13,bus=pcie.0,addr=0xc \
> --device ioh3420,port=0x68,chassis=14,id=pci.14,bus=pcie.0,addr=0xd \
> --device ioh3420,port=0x70,chassis=15,id=pci.15,bus=pcie.0,addr=0xe \
> +-device ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x11,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x1 \
> +-device ioh3420,port=0x12,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x2 \
> +-device ioh3420,port=0x13,chassis=6,id=pci.6,bus=pcie.0,addr=0x2.0x3 \
> +-device ioh3420,port=0x14,chassis=7,id=pci.7,bus=pcie.0,addr=0x2.0x4 \
> +-device ioh3420,port=0x15,chassis=8,id=pci.8,bus=pcie.0,addr=0x2.0x5 \
> +-device ioh3420,port=0x16,chassis=9,id=pci.9,bus=pcie.0,addr=0x2.0x6 \
> +-device ioh3420,port=0x17,chassis=10,id=pci.10,bus=pcie.0,addr=0x2.0x7 \
> +-device ioh3420,port=0x18,chassis=11,id=pci.11,bus=pcie.0,multifunction=on,\
> +addr=0x3 \
> +-device ioh3420,port=0x19,chassis=12,id=pci.12,bus=pcie.0,addr=0x3.0x1 \
> +-device ioh3420,port=0x1a,chassis=13,id=pci.13,bus=pcie.0,addr=0x3.0x2 \
> +-device ioh3420,port=0x1b,chassis=14,id=pci.14,bus=pcie.0,addr=0x3.0x3 \
> +-device ioh3420,port=0x1c,chassis=15,id=pci.15,bus=pcie.0,addr=0x3.0x4 \
> -device nec-usb-xhci,id=usb,bus=pci.8,addr=0x0 \
> -device virtio-scsi-pci,id=scsi0,bus=pci.7,addr=0x0 \
> -device virtio-serial-pci,id=virtio-serial0,bus=pci.6,addr=0x0 \
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-virt-manager-basic.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-virt-manager-basic.args
> index 60af251..e139e52 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-virt-manager-basic.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-virt-manager-basic.args
> @@ -18,12 +18,13 @@ QEMU_AUDIO_DRV=spice \
> -global ICH9-LPC.disable_s3=1 \
> -global ICH9-LPC.disable_s4=1 \
> -boot c \
> --device ioh3420,port=0x10,chassis=1,id=pci.1,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=2,id=pci.2,bus=pcie.0,addr=0x3 \
> --device ioh3420,port=0x20,chassis=3,id=pci.3,bus=pcie.0,addr=0x4 \
> --device ioh3420,port=0x28,chassis=4,id=pci.4,bus=pcie.0,addr=0x5 \
> --device ioh3420,port=0x30,chassis=5,id=pci.5,bus=pcie.0,addr=0x6 \
> --device ioh3420,port=0x38,chassis=6,id=pci.6,bus=pcie.0,addr=0x7 \
> +-device ioh3420,port=0x10,chassis=1,id=pci.1,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x11,chassis=2,id=pci.2,bus=pcie.0,addr=0x2.0x1 \
> +-device ioh3420,port=0x12,chassis=3,id=pci.3,bus=pcie.0,addr=0x2.0x2 \
> +-device ioh3420,port=0x13,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x3 \
> +-device ioh3420,port=0x14,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x4 \
> +-device ioh3420,port=0x15,chassis=6,id=pci.6,bus=pcie.0,addr=0x2.0x5 \
> -device nec-usb-xhci,id=usb,bus=pci.2,addr=0x0 \
> -device virtio-serial-pci,id=virtio-serial0,bus=pci.3,addr=0x0 \
> -drive file=/var/lib/libvirt/images/basic.qcow2,format=qcow2,if=none,\
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35-virtio-pci.args
b/tests/qemuxml2argvdata/qemuxml2argv-q35-virtio-pci.args
> index cada05e..a1025dc 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-q35-virtio-pci.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35-virtio-pci.args
> @@ -18,19 +18,21 @@ QEMU_AUDIO_DRV=none \
> -boot c \
> -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 ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,addr=0x2 \
> --device ioh3420,port=0x18,chassis=4,id=pci.4,bus=pcie.0,addr=0x3 \
> --device ioh3420,port=0x20,chassis=5,id=pci.5,bus=pcie.0,addr=0x4 \
> --device ioh3420,port=0x28,chassis=6,id=pci.6,bus=pcie.0,addr=0x5 \
> --device ioh3420,port=0x30,chassis=7,id=pci.7,bus=pcie.0,addr=0x6 \
> --device ioh3420,port=0x38,chassis=8,id=pci.8,bus=pcie.0,addr=0x7 \
> --device ioh3420,port=0x40,chassis=9,id=pci.9,bus=pcie.0,addr=0x8 \
> --device ioh3420,port=0x48,chassis=10,id=pci.10,bus=pcie.0,addr=0x9 \
> --device ioh3420,port=0x50,chassis=11,id=pci.11,bus=pcie.0,addr=0xa \
> --device ioh3420,port=0x58,chassis=12,id=pci.12,bus=pcie.0,addr=0xb \
> --device ioh3420,port=0x60,chassis=13,id=pci.13,bus=pcie.0,addr=0xc \
> --device ioh3420,port=0x68,chassis=14,id=pci.14,bus=pcie.0,addr=0xd \
> --device ioh3420,port=0x70,chassis=15,id=pci.15,bus=pcie.0,addr=0xe \
> +-device ioh3420,port=0x10,chassis=3,id=pci.3,bus=pcie.0,multifunction=on,\
> +addr=0x2 \
> +-device ioh3420,port=0x11,chassis=4,id=pci.4,bus=pcie.0,addr=0x2.0x1 \
> +-device ioh3420,port=0x12,chassis=5,id=pci.5,bus=pcie.0,addr=0x2.0x2 \
> +-device ioh3420,port=0x13,chassis=6,id=pci.6,bus=pcie.0,addr=0x2.0x3 \
> +-device ioh3420,port=0x14,chassis=7,id=pci.7,bus=pcie.0,addr=0x2.0x4 \
> +-device ioh3420,port=0x15,chassis=8,id=pci.8,bus=pcie.0,addr=0x2.0x5 \
> +-device ioh3420,port=0x16,chassis=9,id=pci.9,bus=pcie.0,addr=0x2.0x6 \
> +-device ioh3420,port=0x17,chassis=10,id=pci.10,bus=pcie.0,addr=0x2.0x7 \
> +-device ioh3420,port=0x18,chassis=11,id=pci.11,bus=pcie.0,multifunction=on,\
> +addr=0x3 \
> +-device ioh3420,port=0x19,chassis=12,id=pci.12,bus=pcie.0,addr=0x3.0x1 \
> +-device ioh3420,port=0x1a,chassis=13,id=pci.13,bus=pcie.0,addr=0x3.0x2 \
> +-device ioh3420,port=0x1b,chassis=14,id=pci.14,bus=pcie.0,addr=0x3.0x3 \
> +-device ioh3420,port=0x1c,chassis=15,id=pci.15,bus=pcie.0,addr=0x3.0x4 \
> -device nec-usb-xhci,id=usb,bus=pci.4,addr=0x0 \
> -device virtio-scsi-pci,id=scsi0,bus=pci.2,addr=0x4 \
> -device virtio-serial-pci,id=virtio-serial0,bus=pci.2,addr=0x3 \
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index c6f9593..becb492 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -1978,6 +1978,7 @@ mymain(void)
> QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
> QEMU_CAPS_DEVICE_IOH3420,
> QEMU_CAPS_ICH9_AHCI,
> + QEMU_CAPS_PCI_MULTIFUNCTION,
> QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
> QEMU_CAPS_DEVICE_QXL);
> DO_TEST("autoindex",
> @@ -2021,6 +2022,7 @@ mymain(void)
> QEMU_CAPS_DEVICE_IOH3420,
> QEMU_CAPS_DEVICE_X3130_UPSTREAM,
> QEMU_CAPS_ICH9_AHCI,
> + QEMU_CAPS_PCI_MULTIFUNCTION,
> QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
> QEMU_CAPS_DEVICE_QXL);
> DO_TEST("pcie-switch-downstream-port",
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-root-port.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-root-port.xml
> index a4ff820..082dd6c 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-root-port.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-root-port.xml
> @@ -37,7 +37,7 @@
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> <target chassis='40' port='0x1a'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='sata' index='0'>
> <address type='pci' domain='0x0000' bus='0x00'
slot='0x1f' function='0x2'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-switch-upstream-port.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-switch-upstream-port.xml
> index 53e10d0..52c9177 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-switch-upstream-port.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-switch-upstream-port.xml
> @@ -36,8 +36,8 @@
> </controller>
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='4' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='4' port='0x11'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='pci' index='5'
model='pcie-switch-upstream-port'>
> <model name='x3130-upstream'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-default-devices-only.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-default-devices-only.xml
> index e64b80c..e8a7d8c 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-default-devices-only.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-default-devices-only.xml
> @@ -28,13 +28,13 @@
> </controller>
> <controller type='pci' index='2'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='2' port='0x10'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x0'/>
> + <target chassis='2' port='0x9'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x1'/>
> </controller>
> <controller type='pci' index='3'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='3' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='3' port='0xa'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x2'/>
> </controller>
> <input type='mouse' bus='ps2'/>
> <input type='keyboard' bus='ps2'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-multifunction.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-multifunction.xml
> index 3d5cd76..06b8144 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-multifunction.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-multifunction.xml
> @@ -50,6 +50,61 @@
> <target chassis='7' port='0x21'/>
> <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x1'/>
> </controller>
> + <controller type='pci' index='8'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='8' port='0x8'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x0'/>
> + </controller>
> + <controller type='pci' index='9'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='9' port='0x9'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x1'/>
> + </controller>
> + <controller type='pci' index='10'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='10' port='0xa'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x2'/>
> + </controller>
> + <controller type='pci' index='11'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='11' port='0xb'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x3'/>
> + </controller>
> + <controller type='pci' index='12'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='12' port='0xc'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x4'/>
> + </controller>
> + <controller type='pci' index='13'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='13' port='0xd'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x5'/>
> + </controller>
> + <controller type='pci' index='14'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='14' port='0xe'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x6'/>
> + </controller>
> + <controller type='pci' index='15'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='15' port='0xf'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x01' function='0x7'/>
> + </controller>
> + <controller type='pci' index='16'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='16' port='0x13'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x3'/>
> + </controller>
> + <controller type='pci' index='17'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='17' port='0x14'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x4'/>
> + </controller>
> + <controller type='pci' index='18'
model='pcie-root-port'>
> + <model name='ioh3420'/>
> + <target chassis='18' port='0x15'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x5'/>
> + </controller>
> <controller type='usb' index='0'
model='nec-xhci'>
> <address type='pci' domain='0x0000' bus='0x01'
slot='0x00' function='0x0'/>
> </controller>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie-autoadd.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie-autoadd.xml
> index 3742e14..28862c9 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie-autoadd.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie-autoadd.xml
> @@ -39,68 +39,68 @@
> </controller>
> <controller type='pci' index='2'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='2' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='2' port='0x11'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='pci' index='3'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='3' port='0x20'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/>
> + <target chassis='3' port='0x12'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x2'/>
> </controller>
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='4' port='0x28'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
> + <target chassis='4' port='0x13'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x3'/>
> </controller>
> <controller type='pci' index='5'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='5' port='0x30'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
> + <target chassis='5' port='0x14'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x4'/>
> </controller>
> <controller type='pci' index='6'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='6' port='0x38'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
> + <target chassis='6' port='0x15'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x5'/>
> </controller>
> <controller type='pci' index='7'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='7' port='0x40'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x0'/>
> + <target chassis='7' port='0x16'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x6'/>
> </controller>
> <controller type='pci' index='8'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='8' port='0x48'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x09' function='0x0'/>
> + <target chassis='8' port='0x17'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x7'/>
> </controller>
> <controller type='pci' index='9'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='9' port='0x50'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0a' function='0x0'/>
> + <target chassis='9' port='0x18'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> </controller>
> <controller type='pci' index='10'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='10' port='0x58'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0b' function='0x0'/>
> + <target chassis='10' port='0x19'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x1'/>
> </controller>
> <controller type='pci' index='11'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='11' port='0x60'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0c' function='0x0'/>
> + <target chassis='11' port='0x1a'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x2'/>
> </controller>
> <controller type='pci' index='12'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='12' port='0x68'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0d' function='0x0'/>
> + <target chassis='12' port='0x1b'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x3'/>
> </controller>
> <controller type='pci' index='13'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='13' port='0x70'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0e' function='0x0'/>
> + <target chassis='13' port='0x1c'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x4'/>
> </controller>
> <controller type='pci' index='14'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='14' port='0x78'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0f' function='0x0'/>
> + <target chassis='14' port='0x1d'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x5'/>
> </controller>
> <filesystem type='mount' accessmode='passthrough'>
> <source dir='/export/to/guest'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml
> index 8e727fb..7c74b60 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-pcie.xml
> @@ -36,63 +36,63 @@
> </controller>
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='4' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='4' port='0x11'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='pci' index='5'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='5' port='0x20'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/>
> + <target chassis='5' port='0x12'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x2'/>
> </controller>
> <controller type='pci' index='6'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='6' port='0x28'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
> + <target chassis='6' port='0x13'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x3'/>
> </controller>
> <controller type='pci' index='7'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='7' port='0x30'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
> + <target chassis='7' port='0x14'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x4'/>
> </controller>
> <controller type='pci' index='8'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='8' port='0x38'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
> + <target chassis='8' port='0x15'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x5'/>
> </controller>
> <controller type='pci' index='9'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='9' port='0x40'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x0'/>
> + <target chassis='9' port='0x16'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x6'/>
> </controller>
> <controller type='pci' index='10'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='10' port='0x48'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x09' function='0x0'/>
> + <target chassis='10' port='0x17'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x7'/>
> </controller>
> <controller type='pci' index='11'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='11' port='0x50'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0a' function='0x0'/>
> + <target chassis='11' port='0x18'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> </controller>
> <controller type='pci' index='12'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='12' port='0x58'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0b' function='0x0'/>
> + <target chassis='12' port='0x19'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x1'/>
> </controller>
> <controller type='pci' index='13'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='13' port='0x60'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0c' function='0x0'/>
> + <target chassis='13' port='0x1a'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x2'/>
> </controller>
> <controller type='pci' index='14'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='14' port='0x68'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0d' function='0x0'/>
> + <target chassis='14' port='0x1b'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x3'/>
> </controller>
> <controller type='pci' index='15'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='15' port='0x70'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0e' function='0x0'/>
> + <target chassis='15' port='0x1c'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x4'/>
> </controller>
> <controller type='virtio-serial' index='0'>
> <address type='pci' domain='0x0000' bus='0x06'
slot='0x00' function='0x0'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virt-manager-basic.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virt-manager-basic.xml
> index 236d955..3bbd99f 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virt-manager-basic.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virt-manager-basic.xml
> @@ -50,28 +50,28 @@
> </controller>
> <controller type='pci' index='2'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='2' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='2' port='0x11'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='pci' index='3'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='3' port='0x20'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/>
> + <target chassis='3' port='0x12'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x2'/>
> </controller>
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='4' port='0x28'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
> + <target chassis='4' port='0x13'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x3'/>
> </controller>
> <controller type='pci' index='5'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='5' port='0x30'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
> + <target chassis='5' port='0x14'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x4'/>
> </controller>
> <controller type='pci' index='6'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='6' port='0x38'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
> + <target chassis='6' port='0x15'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x5'/>
> </controller>
> <interface type='user'>
> <mac address='52:54:00:9a:e6:c6'/>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virtio-pci.xml
b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virtio-pci.xml
> index c4bd357..d2fa885 100644
> --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virtio-pci.xml
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35-virtio-pci.xml
> @@ -36,63 +36,63 @@
> </controller>
> <controller type='pci' index='4'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='4' port='0x18'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> + <target chassis='4' port='0x11'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x1'/>
> </controller>
> <controller type='pci' index='5'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='5' port='0x20'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x04' function='0x0'/>
> + <target chassis='5' port='0x12'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x2'/>
> </controller>
> <controller type='pci' index='6'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='6' port='0x28'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x05' function='0x0'/>
> + <target chassis='6' port='0x13'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x3'/>
> </controller>
> <controller type='pci' index='7'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='7' port='0x30'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x06' function='0x0'/>
> + <target chassis='7' port='0x14'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x4'/>
> </controller>
> <controller type='pci' index='8'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='8' port='0x38'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
> + <target chassis='8' port='0x15'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x5'/>
> </controller>
> <controller type='pci' index='9'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='9' port='0x40'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x08' function='0x0'/>
> + <target chassis='9' port='0x16'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x6'/>
> </controller>
> <controller type='pci' index='10'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='10' port='0x48'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x09' function='0x0'/>
> + <target chassis='10' port='0x17'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x02' function='0x7'/>
> </controller>
> <controller type='pci' index='11'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='11' port='0x50'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0a' function='0x0'/>
> + <target chassis='11' port='0x18'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x0'/>
> </controller>
> <controller type='pci' index='12'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='12' port='0x58'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0b' function='0x0'/>
> + <target chassis='12' port='0x19'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x1'/>
> </controller>
> <controller type='pci' index='13'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='13' port='0x60'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0c' function='0x0'/>
> + <target chassis='13' port='0x1a'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x2'/>
> </controller>
> <controller type='pci' index='14'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='14' port='0x68'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0d' function='0x0'/>
> + <target chassis='14' port='0x1b'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x3'/>
> </controller>
> <controller type='pci' index='15'
model='pcie-root-port'>
> <model name='ioh3420'/>
> - <target chassis='15' port='0x70'/>
> - <address type='pci' domain='0x0000' bus='0x00'
slot='0x0e' function='0x0'/>
> + <target chassis='15' port='0x1c'/>
> + <address type='pci' domain='0x0000' bus='0x00'
slot='0x03' function='0x4'/>
> </controller>
> <controller type='virtio-serial' index='0'>
> <address type='pci' domain='0x0000' bus='0x02'
slot='0x03' function='0x0'/>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index 569a375..845e935 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -850,11 +850,13 @@ mymain(void)
> DO_TEST("pcie-root-port",
> QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
> QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI,
> + QEMU_CAPS_PCI_MULTIFUNCTION,
> QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
> QEMU_CAPS_DEVICE_QXL);
> DO_TEST("pcie-switch-upstream-port",
> QEMU_CAPS_DEVICE_PCI_BRIDGE, QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
> QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_ICH9_AHCI,
> + QEMU_CAPS_PCI_MULTIFUNCTION,
> QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
> QEMU_CAPS_DEVICE_QXL);
> DO_TEST("pcie-switch-downstream-port",