[libvirt] [PATCH v3 20/26] tests: Add baseline tests for automatic PHB usage

Laine Stump laine at laine.org
Tue Jun 27 14:28:05 UTC 2017


On 06/23/2017 11:03 AM, Andrea Bolognani wrote:
> These tests demonstrate that, while it's now possible for the
> user to create PHB explicitly and manually assign devices to
> them, libvirt still defaults to extending the guest PCI
> topology using PCI bridges and making suboptimal device
> placement choices.
> 
> The next few commits will improve on these behaviors and the
> tests outputs will automatically be updated to reflect this.
> 
> Signed-off-by: Andrea Bolognani <abologna at redhat.com>
> ---
>  .../qemuxml2argv-pseries-hostdevs-1.args           |  23 ++++
>  .../qemuxml2argv-pseries-hostdevs-1.xml            |  38 +++++++
>  .../qemuxml2argv-pseries-hostdevs-2.args           |  24 ++++
>  .../qemuxml2argv-pseries-hostdevs-2.xml            |  37 ++++++
>  .../qemuxml2argv-pseries-hostdevs-3.args           |  24 ++++
>  .../qemuxml2argv-pseries-hostdevs-3.xml            |  31 +++++
>  .../qemuxml2argv-pseries-many-buses-1.args         |  22 ++++
>  .../qemuxml2argv-pseries-many-buses-1.xml          |  19 ++++
>  .../qemuxml2argv-pseries-many-buses-2.args         |  22 ++++
>  .../qemuxml2argv-pseries-many-buses-2.xml          |  18 +++
>  .../qemuxml2argv-pseries-many-devices.args         |  53 +++++++++
>  .../qemuxml2argv-pseries-many-devices.xml          |  48 ++++++++
>  tests/qemuxml2argvtest.c                           |  36 ++++++
>  .../qemuxml2xmlout-pseries-hostdevs-1.xml          |  46 ++++++++
>  .../qemuxml2xmlout-pseries-hostdevs-2.xml          |  47 ++++++++
>  .../qemuxml2xmlout-pseries-hostdevs-3.xml          |  49 ++++++++
>  .../qemuxml2xmlout-pseries-many-buses-1.xml        |  33 ++++++
>  .../qemuxml2xmlout-pseries-many-buses-2.xml        |  34 ++++++
>  .../qemuxml2xmlout-pseries-many-devices.xml        | 126 +++++++++++++++++++++
>  tests/qemuxml2xmltest.c                            |  36 ++++++
>  20 files changed, 766 insertions(+)
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.xml
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.xml
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.xml
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.xml
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.xml
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.args
>  create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-1.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-2.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-3.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-1.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-2.xml
>  create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-devices.xml
> 
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.args
> new file mode 100644
> index 0000000..88eb081
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.args
> @@ -0,0 +1,23 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device vfio-pci,host=0001:01:00.0,id=hostdev0,bus=pci.0,addr=0x1 \
> +-device vfio-pci,host=0005:90:01.0,id=hostdev1,bus=pci.0,addr=0x2 \
> +-device vfio-pci,host=0001:01:00.1,id=hostdev2,bus=pci.0,addr=0x3
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.xml
> new file mode 100644
> index 0000000..87fe145
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-1.xml
> @@ -0,0 +1,38 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- This hostdev will cause a new PHB to be created because its
> +         isolation group is 2 -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +    </hostdev>
> +    <!-- This hostdev can't share the PHB that was just created, because
> +         its isolation group is 3 -->

I like the idea of putting comments in the test XML indicating exactly
what we're testing for!


Reviewed-by: Laine Stump <laine at laine.org>

> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0005' bus='0x90' slot='0x01' function='0x0'/>
> +      </source>
> +    </hostdev>
> +    <!-- This hostdev will be placed on the first PHB, since its isolation
> +         group is 2 just like the first hostdev -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x1'/>
> +      </source>
> +    </hostdev>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.args
> new file mode 100644
> index 0000000..c43e15d
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.args
> @@ -0,0 +1,24 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
> +-device virtio-scsi-pci,id=scsi0,bus=pci.1,addr=0x1 \
> +-device vfio-pci,host=0001:01:00.0,id=hostdev0,bus=pci.1,addr=0x2 \
> +-device vfio-pci,host=0005:90:01.0,id=hostdev1,bus=pci.0,addr=0x2
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.xml
> new file mode 100644
> index 0000000..551b588
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-2.xml
> @@ -0,0 +1,37 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- This device will cause a new PHB to be created because of its
> +         address -->
> +    <controller type='scsi' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
> +    </controller>
> +    <!-- This hostdev will share the same PHB as the SCSI controller
> +         despite being in a separate isolation group, because the
> +         address has been requested explicitly by the user -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/>
> +    </hostdev>
> +    <!-- This hostdev can use neither the PHB that was just created, nor
> +         the default one, because its isolation group is 3 -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0005' bus='0x90' slot='0x01' function='0x0'/>
> +      </source>
> +    </hostdev>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.args
> new file mode 100644
> index 0000000..99df2e7
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.args
> @@ -0,0 +1,24 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
> +-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.0,addr=0x2 \
> +-device vfio-pci,host=0001:01:00.0,id=hostdev0,bus=pci.2,addr=0x1 \
> +-device vfio-pci,host=0001:01:00.1,id=hostdev1,bus=pci.0,addr=0x3
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.xml
> new file mode 100644
> index 0000000..0e61a17
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-hostdevs-3.xml
> @@ -0,0 +1,31 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- This hostdev will cause a new PHB to be created because its
> +         isolation group is 2. It will be PHB 2 due to the address -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
> +    </hostdev>
> +    <!-- This hostdev will be placed on the same PHB, since its isolation
> +         group is also 2 -->
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x1'/>
> +      </source>
> +    </hostdev>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.args
> new file mode 100644
> index 0000000..bf78fc1
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.args
> @@ -0,0 +1,22 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
> +-device virtio-scsi-pci,id=scsi0,bus=pci.1,addr=0x1
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.xml
> new file mode 100644
> index 0000000..c52349d
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-1.xml
> @@ -0,0 +1,19 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- The SCSI controller is plugged into PCI bus 1, but since said bus
> +         is not present in the configuration libvirt will have to add it -->
> +    <controller type='scsi' model='virtio-scsi'>
> +      <address type='pci' bus='1' slot='1'/>
> +    </controller>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.args
> new file mode 100644
> index 0000000..1cb5831
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.args
> @@ -0,0 +1,22 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device spapr-pci-host-bridge,index=1,id=pci.2 \
> +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.xml
> new file mode 100644
> index 0000000..7065626
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-buses-2.xml
> @@ -0,0 +1,18 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- PCI buses 0 and 2 are present in the configuration, libvirt will
> +         have to fill in the blanks and add bus 1 -->
> +    <controller type='pci' index='0' model='pci-root'/>
> +    <controller type='pci' index='2' model='pci-root'/>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.args b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.args
> new file mode 100644
> index 0000000..1db4533
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.args
> @@ -0,0 +1,53 @@
> +LC_ALL=C \
> +PATH=/bin \
> +HOME=/home/test \
> +USER=test \
> +LOGNAME=test \
> +QEMU_AUDIO_DRV=none \
> +/usr/bin/qemu-system-ppc64 \
> +-name guest \
> +-S \
> +-M pseries \
> +-m 512 \
> +-smp 1,sockets=1,cores=1,threads=1 \
> +-uuid 1ccfd97d-5eb4-478a-bbe6-88d254c16db7 \
> +-nographic \
> +-nodefconfig \
> +-nodefaults \
> +-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-guest/monitor.sock,\
> +server,nowait \
> +-mon chardev=charmonitor,id=monitor,mode=readline \
> +-boot c \
> +-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
> +-device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=0x2 \
> +-device virtio-scsi-pci,id=scsi1,bus=pci.0,addr=0x3 \
> +-device virtio-scsi-pci,id=scsi2,bus=pci.0,addr=0x4 \
> +-device virtio-scsi-pci,id=scsi3,bus=pci.0,addr=0x5 \
> +-device virtio-scsi-pci,id=scsi4,bus=pci.0,addr=0x6 \
> +-device virtio-scsi-pci,id=scsi5,bus=pci.0,addr=0x7 \
> +-device virtio-scsi-pci,id=scsi6,bus=pci.0,addr=0x8 \
> +-device virtio-scsi-pci,id=scsi7,bus=pci.0,addr=0x9 \
> +-device virtio-scsi-pci,id=scsi8,bus=pci.0,addr=0xa \
> +-device virtio-scsi-pci,id=scsi9,bus=pci.0,addr=0xb \
> +-device virtio-scsi-pci,id=scsi10,bus=pci.0,addr=0xc \
> +-device virtio-scsi-pci,id=scsi11,bus=pci.0,addr=0xd \
> +-device virtio-scsi-pci,id=scsi12,bus=pci.0,addr=0xe \
> +-device virtio-scsi-pci,id=scsi13,bus=pci.0,addr=0xf \
> +-device virtio-scsi-pci,id=scsi14,bus=pci.0,addr=0x10 \
> +-device virtio-scsi-pci,id=scsi15,bus=pci.0,addr=0x11 \
> +-device virtio-scsi-pci,id=scsi16,bus=pci.0,addr=0x12 \
> +-device virtio-scsi-pci,id=scsi17,bus=pci.0,addr=0x13 \
> +-device virtio-scsi-pci,id=scsi18,bus=pci.0,addr=0x14 \
> +-device virtio-scsi-pci,id=scsi19,bus=pci.0,addr=0x15 \
> +-device virtio-scsi-pci,id=scsi20,bus=pci.0,addr=0x16 \
> +-device virtio-scsi-pci,id=scsi21,bus=pci.0,addr=0x17 \
> +-device virtio-scsi-pci,id=scsi22,bus=pci.0,addr=0x18 \
> +-device virtio-scsi-pci,id=scsi23,bus=pci.0,addr=0x19 \
> +-device virtio-scsi-pci,id=scsi24,bus=pci.0,addr=0x1a \
> +-device virtio-scsi-pci,id=scsi25,bus=pci.0,addr=0x1b \
> +-device virtio-scsi-pci,id=scsi26,bus=pci.0,addr=0x1c \
> +-device virtio-scsi-pci,id=scsi27,bus=pci.0,addr=0x1d \
> +-device virtio-scsi-pci,id=scsi28,bus=pci.0,addr=0x1e \
> +-device virtio-scsi-pci,id=scsi29,bus=pci.0,addr=0x1f \
> +-device virtio-scsi-pci,id=scsi30,bus=pci.1,addr=0x1 \
> +-device virtio-scsi-pci,id=scsi31,bus=pci.1,addr=0x2
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.xml b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.xml
> new file mode 100644
> index 0000000..f3daba4
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-pseries-many-devices.xml
> @@ -0,0 +1,48 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +  </os>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <!-- pci-root has 31 slots and there are 32 SCSI controllers here, so
> +         libvirt will automatically add at least one more PCI controller -->
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='scsi' model='virtio-scsi'/>
> +    <controller type='usb' model='none'/>
> +    <memballoon model='none'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
> index ff68884..137f59a 100644
> --- a/tests/qemuxml2argvtest.c
> +++ b/tests/qemuxml2argvtest.c
> @@ -1717,6 +1717,42 @@ mymain(void)
>              QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CHARDEV,
>              QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
>  
> +    DO_TEST("pseries-many-devices",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-many-buses-1",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-many-buses-2",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-hostdevs-1",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +    DO_TEST("pseries-hostdevs-2",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +    DO_TEST("pseries-hostdevs-3",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +
>      DO_TEST("disk-ide-drive-split",
>              QEMU_CAPS_NODEFCONFIG,
>              QEMU_CAPS_IDE_CD);
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-1.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-1.xml
> new file mode 100644
> index 0000000..34defea
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-1.xml
> @@ -0,0 +1,46 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='usb' index='0' model='none'/>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
> +    </hostdev>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0005' bus='0x90' slot='0x01' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> +    </hostdev>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x1'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
> +    </hostdev>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-2.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-2.xml
> new file mode 100644
> index 0000000..62bead5
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-2.xml
> @@ -0,0 +1,47 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='scsi' index='0' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
> +    </controller>
> +    <controller type='usb' index='0' model='none'/>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <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'/>
> +    </controller>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/>
> +    </hostdev>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0005' bus='0x90' slot='0x01' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> +    </hostdev>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-3.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-3.xml
> new file mode 100644
> index 0000000..77c0909
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-hostdevs-3.xml
> @@ -0,0 +1,49 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='usb' index='0' model='none'/>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <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'/>
> +    </controller>
> +    <controller type='pci' index='2' model='pci-bridge'>
> +      <model name='pci-bridge'/>
> +      <target chassisNr='2'/>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> +    </controller>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x0'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>
> +    </hostdev>
> +    <hostdev mode='subsystem' type='pci' managed='yes'>
> +      <driver name='vfio'/>
> +      <source>
> +        <address domain='0x0001' bus='0x01' slot='0x00' function='0x1'/>
> +      </source>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
> +    </hostdev>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-1.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-1.xml
> new file mode 100644
> index 0000000..9044936
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-1.xml
> @@ -0,0 +1,33 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='scsi' index='0' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
> +    </controller>
> +    <controller type='usb' index='0' model='none'/>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <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'/>
> +    </controller>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-2.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-2.xml
> new file mode 100644
> index 0000000..75dfabf
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-buses-2.xml
> @@ -0,0 +1,34 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <controller type='pci' index='2' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='1'/>
> +    </controller>
> +    <controller type='usb' index='0' model='none'/>
> +    <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'/>
> +    </controller>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-devices.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-devices.xml
> new file mode 100644
> index 0000000..b596fe6
> --- /dev/null
> +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pseries-many-devices.xml
> @@ -0,0 +1,126 @@
> +<domain type='qemu'>
> +  <name>guest</name>
> +  <uuid>1ccfd97d-5eb4-478a-bbe6-88d254c16db7</uuid>
> +  <memory unit='KiB'>524288</memory>
> +  <currentMemory unit='KiB'>524288</currentMemory>
> +  <vcpu placement='static'>1</vcpu>
> +  <os>
> +    <type arch='ppc64' machine='pseries'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <clock offset='utc'/>
> +  <on_poweroff>destroy</on_poweroff>
> +  <on_reboot>restart</on_reboot>
> +  <on_crash>destroy</on_crash>
> +  <devices>
> +    <emulator>/usr/bin/qemu-system-ppc64</emulator>
> +    <controller type='scsi' index='0' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='1' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='2' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='3' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='4' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='5' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='6' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='7' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='8' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='9' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='10' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='11' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0d' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='12' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0e' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='13' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x0f' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='14' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='15' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x11' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='16' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x12' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='17' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x13' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='18' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x14' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='19' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x15' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='20' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x16' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='21' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x17' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='22' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x18' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='23' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='24' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1a' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='25' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1b' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='26' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1c' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='27' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1d' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='28' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='29' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='30' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
> +    </controller>
> +    <controller type='scsi' index='31' model='virtio-scsi'>
> +      <address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/>
> +    </controller>
> +    <controller type='usb' index='0' model='none'/>
> +    <controller type='pci' index='0' model='pci-root'>
> +      <model name='spapr-pci-host-bridge'/>
> +      <target index='0'/>
> +    </controller>
> +    <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'/>
> +    </controller>
> +    <memballoon model='none'/>
> +    <panic model='pseries'/>
> +  </devices>
> +</domain>
> diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
> index a0a846c..312e2b1 100644
> --- a/tests/qemuxml2xmltest.c
> +++ b/tests/qemuxml2xmltest.c
> @@ -683,6 +683,42 @@ mymain(void)
>              QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_CHARDEV,
>              QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
>  
> +    DO_TEST("pseries-many-devices",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-many-buses-1",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-many-buses-2",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI);
> +    DO_TEST("pseries-hostdevs-1",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +    DO_TEST("pseries-hostdevs-2",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +    DO_TEST("pseries-hostdevs-3",
> +            QEMU_CAPS_CHARDEV, QEMU_CAPS_NODEFCONFIG,
> +            QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
> +            QEMU_CAPS_HOST_PCI_MULTIDOMAIN,
> +            QEMU_CAPS_DEVICE_PCI_BRIDGE,
> +            QEMU_CAPS_VIRTIO_SCSI,
> +            QEMU_CAPS_DEVICE_VFIO_PCI);
> +
>      DO_TEST("balloon-device-auto", NONE);
>      DO_TEST("balloon-device-period", NONE);
>      DO_TEST("channel-virtio-auto", NONE);
> 




More information about the libvir-list mailing list