[libvirt] [PATCH 14/15] conf: new pci controller model pcie-expander-bus

Laine Stump laine at laine.org
Thu Mar 24 19:25:49 UTC 2016


This controller provides a single PCIe port on a new root. It is
similar to pci-expander-bus, intended to provide a bus that can be
associated with a guest-identifiable NUMA node, but is for
machinetypes with PCIe rather than PCI (e.g. q35-based machinetypes).

Aside from PCIe vs. PCI, the other main difference is that a
pci-expander-bus has a companion pci-bridge that is automatically
attached along with it, but pcie-expander-bus has only a single port,
and that port will only connect to a pcie-root-port, or to a
pcie-switch-upstream-port. In order for the bus to be of any use in
the guest, it must have either a pcie-root-port or a
pcie-switch-upstream-port attached (and one or more
pcie-switch-downstream-ports attached to the
pcie-switch-upstream-port).
---
 docs/formatdomain.html.in                          |  40 ++-
 docs/schemas/domaincommon.rng                      |   3 +
 src/conf/domain_addr.c                             |  17 +-
 src/conf/domain_conf.c                             |   6 +-
 src/conf/domain_conf.h                             |   2 +
 src/qemu/qemu_domain_address.c                     |   2 +
 .../qemuxml2argv-pcie-expander-bus.xml             | 247 +++++++++++++
 .../qemuxml2xmlout-pcie-expander-bus.xml           | 384 +++++++++++++++++++++
 tests/qemuxml2xmltest.c                            |   7 +
 9 files changed, 694 insertions(+), 14 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.xml
 create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-expander-bus.xml

diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index 5552b90..2a315dd 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3044,15 +3044,18 @@
       possible values <code>pci-root</code>, <code>pcie-root</code>,
       <code>pcie-root-port</code>, <code>pci-bridge</code>,
       <code>dmi-to-pci-bridge</code>, <code>pcie-switch-upstream-port</code>,
-      <code>pcie-switch-downstream-port</code>, or <code>pci-expander-bus</code>.
-      (pci-root and pci-bridge <span class="since">since 1.0.5</span>,
-      pcie-root and dmi-to-pci-bridge <span class="since">since
-      1.1.2</span>, pcie-root-port, pcie-switch-upstream-port,
-      pcie-switch-downstream-port <span class="since">since 1.2.19</span>,
-      and pci-expander-bus <span class="since">since 1.3.3</span>)
-      The root controllers (<code>pci-root</code> and <code>pcie-root</code>)
-      have an optional <code>pcihole64</code> element specifying how big
-      (in kilobytes, or in the unit specified by <code>pcihole64</code>'s
+      <code>pcie-switch-downstream-port</code>, <code>pci-expander-bus</code>,
+      or <code>pcie-expander-bus</code>.  (pci-root and
+      pci-bridge <span class="since">since 1.0.5</span>, pcie-root and
+      dmi-to-pci-bridge <span class="since">since 1.1.2</span>,
+      pcie-root-port, pcie-switch-upstream-port,
+      pcie-switch-downstream-port <span class="since">since
+      1.2.19</span>, and pci-expander-bus and
+      pcie-expander-bus <span class="since">since 1.3.3</span>) The
+      root controllers (<code>pci-root</code>
+      and <code>pcie-root</code>) have an
+      optional <code>pcihole64</code> element specifying how big (in
+      kilobytes, or in the unit specified by <code>pcihole64</code>'s
       <code>unit</code> attribute) the 64-bit PCI hole should be. Some guests (like
       Windows XP or Windows Server 2003) might crash when QEMU and Seabios
       are recent enough to support 64-bit PCI holes, unless this is disabled
@@ -3114,7 +3117,7 @@
       </dd>
       <dt><code>busNr</code></dt>
       <dd>
-        pci-expander-bus controllers can have an
+        pci-expander-bus and pcie-expander-bus controllers can have an
         optional <code>busNr</code> attribute (1-254). This will be
         the bus number of the new bus; All bus numbers between that
         specified and 255 will be available only for assignment to
@@ -3129,6 +3132,23 @@
         for the pci-bridge that is automatically attached to it (if
         you plan on adding more pci-bridges to the hierarchy of the
         bus, you should manually set busNr to a lower value).
+        <p>
+          A similar algorithm is used for automatically determining
+          the busNr attribute for pcie-expander-bus, but since the
+          pcie-expander-bus doesn't have any built-in pci-bridge, the
+          2nd bus-number is just being reserved for the pcie-root-port
+          that must necessarily be connected to the bus in order to
+          actually plug in an endpoint device. If you intend to plug
+          multiple devices into a pcie-expander-bus, you must instead
+          connect a pcie-switch-upstream-port to the
+          pcie-expander-bus, and multiple pcie-switch-downstream-ports
+          to the pcie-switch-downstream-port, and of course for this
+          to work properly, you will need to decrease the
+          pcie-expander-bus' busNr accordingly so that there are
+          enough unused bus numbers above it to accomodate giving out
+          one bus number for the upstream-port and one for each
+          downstream-port).
+        </p>
       </dd>
       <dt><code><node></code></dt>
       <dd>
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 8827807..fd9d5a2 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -1761,6 +1761,8 @@
                     <value>xio3130-downstream</value>
                     <!-- implementations of 'pci-expander-bus' -->
                     <value>pxb</value>
+                    <!-- implementations of 'pcie-expander-bus' -->
+                    <value>pxb-pcie</value>
                   </choice>
                 </attribute>
                 <empty/>
@@ -1819,6 +1821,7 @@
                     <value>pcie-switch-upstream-port</value>
                     <value>pcie-switch-downstream-port</value>
                     <value>pci-expander-bus</value>
+                    <value>pcie-expander-bus</value>
                   </choice>
                 </attribute>
               </group>
diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c
index 5293dc9..23d671c 100644
--- a/src/conf/domain_addr.c
+++ b/src/conf/domain_addr.c
@@ -57,8 +57,11 @@ virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model,
         *connectType = VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
         break;
     case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE:
-        /* dmi-to-pci-bridge is treated like a PCIe device
-         * (e.g. it can be plugged directly into pcie-root)
+    case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
+        /* dmi-to-pci-bridge and pcie-expander-bus are treated like
+         * PCIe devices (the part of pcie-expander-bus that is plugged
+         * in isn't the expander bus itself, but a companion device
+         * used for setting it up).
          */
         *connectType = VIR_PCI_CONNECT_TYPE_PCIE_DEVICE;
         break;
@@ -278,6 +281,16 @@ virDomainPCIAddressBusSetModel(virDomainPCIAddressBusPtr bus,
         bus->minSlot = 0;
         bus->maxSlot = VIR_PCI_ADDRESS_SLOT_LAST;
         break;
+    case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
+        /* single slot, no hotplug, only accepts pcie-root-port or
+         * pcie-switch-upstream-port.
+         */
+        bus->flags = (VIR_PCI_CONNECT_TYPE_PCIE_ROOT_PORT
+                      | VIR_PCI_CONNECT_TYPE_PCIE_SWITCH_UPSTREAM_PORT);
+        bus->minSlot = 0;
+        bus->maxSlot = 0;
+        break;
+
     default:
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("Invalid PCI controller model %d"), model);
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 1619517..b7cffd8 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -315,7 +315,8 @@ VIR_ENUM_IMPL(virDomainControllerModelPCI, VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST,
               "pcie-root-port",
               "pcie-switch-upstream-port",
               "pcie-switch-downstream-port",
-              "pci-expander-bus")
+              "pci-expander-bus",
+              "pcie-expander-bus")
 
 VIR_ENUM_IMPL(virDomainControllerPCIModelName,
               VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_LAST,
@@ -325,7 +326,8 @@ VIR_ENUM_IMPL(virDomainControllerPCIModelName,
               "ioh3420",
               "x3130-upstream",
               "xio3130-downstream",
-              "pxb")
+              "pxb",
+              "pxb-pcie")
 
 VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
               "auto",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 4757065..673ddd0 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -758,6 +758,7 @@ typedef enum {
     VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT,
     VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_DOWNSTREAM_PORT,
     VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS,
+    VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS,
 
     VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST
 } virDomainControllerModelPCI;
@@ -770,6 +771,7 @@ typedef enum {
     VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_X3130_UPSTREAM,
     VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_XIO3130_DOWNSTREAM,
     VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB,
+    VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB_PCIE,
 
     VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_LAST
 } virDomainControllerPCIModelName;
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index aaec7b5..9006643 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -1378,6 +1378,7 @@ qemuDomainPCIControllerSetDefaultModelName(virDomainControllerDefPtr cont)
     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
         *modelName = VIR_DOMAIN_CONTROLLER_PCI_MODEL_NAME_PXB;
         break;
+    case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT:
     case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT:
     case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST:
@@ -1582,6 +1583,7 @@ qemuDomainAssignPCIAddresses(virDomainDefPtr def,
                        options->port = addr->slot;
                     break;
                 case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS:
+                case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS:
                     if (options->busNr == -1)
                         options->busNr = qemuDomainAddressFindNewBusNr(def);
                     if (options->busNr == -1) {
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.xml b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.xml
new file mode 100644
index 0000000..72681ce
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-pcie-expander-bus.xml
@@ -0,0 +1,247 @@
+<domain type='qemu'>
+  <name>pcie-expander-bus-test</name>
+  <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
+  <memory unit='KiB'>2097152</memory>
+  <currentMemory unit='KiB'>2097152</currentMemory>
+  <vcpu placement='static'>16</vcpu>
+  <os>
+    <type arch='x86_64' machine='q35'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <cpu>
+    <topology sockets='2' cores='4' threads='2'/>
+    <numa>
+      <cell cpus='0-7' memory='109550' unit='KiB'/>
+      <cell cpus='8-15' memory='109550' unit='KiB'/>
+    </numa>
+  </cpu>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/libexec/qemu-kvm</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='sda' bus='sata'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='pci' index='0' model='pcie-root'/>
+    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
+      <model name='i82801b11-bridge'/>
+    </controller>
+    <controller type='pci' index='2' model='pci-bridge'>
+      <model name='pci-bridge'/>
+      <target chassisNr='56'/>
+    </controller>
+    <controller type='pci' index='3' model='pcie-expander-bus'>
+      <model name='pxb-pcie'/>
+      <target busNr='254'>
+        <node>0</node>
+      </target>
+      <address type='pci' bus='0x00' slot='4'/>
+    </controller>
+    <controller type='pci' index='4' model='pcie-root-port'>
+      <target busNr='220'>
+        <node>1</node>
+      </target>
+      <address type='pci' bus='0x03'/>
+    </controller>
+    <controller type='pci' index='5' model='pcie-switch-upstream-port'>
+      <address type='pci' bus='0x04'/>
+    </controller>
+    <controller type='pci' index='6' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='7' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='8' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='9' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='10' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='11' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='12' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='13' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='14' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='15' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='16' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='17' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='18' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='19' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='20' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='21' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='22' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='23' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='24' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='25' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='26' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='27' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='28' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='29' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='30' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='31' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='32' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='33' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='34' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='35' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='36' model='pcie-switch-downstream-port'/>
+    <controller type='pci' index='37' model='pcie-switch-downstream-port'/>
+    <interface type='user'>
+      <mac address='52:54:00:f1:95:51'/>
+      <model type='rtl8139'/>
+      <address type='pci' bus='6'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:5c:c6:1a'/>
+      <model type='e1000'/>
+      <address type='pci' bus='07'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:39:97:ac'/>
+      <model type='e1000'/>
+      <address type='pci' bus='8'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:ee:b9:a8'/>
+      <model type='e1000'/>
+      <address type='pci' bus='9'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:a9:f7:17'/>
+      <model type='e1000'/>
+      <address type='pci' bus='10'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:df:2b:f3'/>
+      <model type='e1000'/>
+      <address type='pci' bus='11'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:78:94:b4'/>
+      <model type='e1000'/>
+      <address type='pci' bus='12'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:6b:9b:06'/>
+      <model type='e1000'/>
+      <address type='pci' bus='13'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:17:df:bc'/>
+      <model type='e1000'/>
+      <address type='pci' bus='14'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:3b:d0:51'/>
+      <model type='e1000'/>
+      <address type='pci' bus='15'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:8d:2d:17'/>
+      <model type='e1000'/>
+      <address type='pci' bus='16'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:a7:66:af'/>
+      <model type='e1000'/>
+      <address type='pci' bus='17'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:54:ab:d7'/>
+      <model type='e1000'/>
+      <address type='pci' bus='18'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:1f:99:90'/>
+      <model type='e1000'/>
+      <address type='pci' bus='19'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:c8:43:87'/>
+      <model type='e1000'/>
+      <address type='pci' bus='20'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:df:22:b2'/>
+      <model type='e1000'/>
+      <address type='pci' bus='21'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:d2:9a:47'/>
+      <model type='e1000'/>
+      <address type='pci' bus='22'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:86:05:e2'/>
+      <model type='e1000'/>
+      <address type='pci' bus='23'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:8c:1c:c2'/>
+      <model type='e1000'/>
+      <address type='pci' bus='24'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:48:58:92'/>
+      <model type='e1000'/>
+      <address type='pci' bus='25'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:99:e5:bf'/>
+      <model type='e1000'/>
+      <address type='pci' bus='26'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:b1:8c:25'/>
+      <model type='e1000'/>
+      <address type='pci' bus='27'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:60:e0:d0'/>
+      <model type='e1000'/>
+      <address type='pci' bus='28'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:37:00:6a'/>
+      <model type='e1000'/>
+      <address type='pci' bus='29'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:c7:c8:ad'/>
+      <model type='e1000'/>
+      <address type='pci' bus='30'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:4e:a7:cf'/>
+      <model type='e1000'/>
+      <address type='pci' bus='31'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:00:79:69'/>
+      <model type='e1000'/>
+      <address type='pci' bus='32'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:47:00:6f'/>
+      <model type='e1000'/>
+      <address type='pci' bus='33'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:2a:8c:8b'/>
+      <model type='e1000'/>
+      <address type='pci' bus='34'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:ec:d5:e3'/>
+      <model type='e1000'/>
+      <address type='pci' bus='35'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:7e:6e:c8'/>
+      <model type='e1000'/>
+      <address type='pci' bus='36'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:7e:6d:c9'/>
+      <model type='e1000'/>
+      <address type='pci' bus='37'/>
+    </interface>
+    <memballoon model='none'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-expander-bus.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-expander-bus.xml
new file mode 100644
index 0000000..7a37870
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-pcie-expander-bus.xml
@@ -0,0 +1,384 @@
+<domain type='qemu'>
+  <name>pcie-expander-bus-test</name>
+  <uuid>11dbdcdd-4c3b-482b-8903-9bdb8c0a2774</uuid>
+  <memory unit='KiB'>2097152</memory>
+  <currentMemory unit='KiB'>2097152</currentMemory>
+  <vcpu placement='static'>16</vcpu>
+  <os>
+    <type arch='x86_64' machine='q35'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <cpu>
+    <topology sockets='2' cores='4' threads='2'/>
+    <numa>
+      <cell id='0' cpus='0-7' memory='109550' unit='KiB'/>
+      <cell id='1' cpus='8-15' memory='109550' unit='KiB'/>
+    </numa>
+  </cpu>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/libexec/qemu-kvm</emulator>
+    <disk type='block' device='disk'>
+      <source dev='/dev/HostVG/QEMUGuest1'/>
+      <target dev='sda' bus='sata'/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+    <controller type='pci' index='0' model='pcie-root'/>
+    <controller type='pci' index='1' model='dmi-to-pci-bridge'>
+      <model name='i82801b11-bridge'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>
+    </controller>
+    <controller type='pci' index='2' model='pci-bridge'>
+      <model name='pci-bridge'/>
+      <target chassisNr='56'/>
+      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
+    </controller>
+    <controller type='pci' index='3' model='pcie-expander-bus'>
+      <model name='pxb-pcie'/>
+      <target busNr='254'>
+        <node>0</node>
+      </target>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </controller>
+    <controller type='pci' index='4' model='pcie-root-port'>
+      <model name='ioh3420'/>
+      <target chassis='4' port='0x0' busNr='220'>
+        <node>1</node>
+      </target>
+      <address type='pci' domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
+    </controller>
+    <controller type='pci' index='5' model='pcie-switch-upstream-port'>
+      <model name='x3130-upstream'/>
+      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
+    </controller>
+    <controller type='pci' index='6' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='6' port='0x0'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
+    </controller>
+    <controller type='pci' index='7' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='7' port='0x1'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x01' function='0x0'/>
+    </controller>
+    <controller type='pci' index='8' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='8' port='0x2'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x02' function='0x0'/>
+    </controller>
+    <controller type='pci' index='9' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='9' port='0x3'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x03' function='0x0'/>
+    </controller>
+    <controller type='pci' index='10' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='10' port='0x4'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x04' function='0x0'/>
+    </controller>
+    <controller type='pci' index='11' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='11' port='0x5'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x05' function='0x0'/>
+    </controller>
+    <controller type='pci' index='12' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='12' port='0x6'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x06' function='0x0'/>
+    </controller>
+    <controller type='pci' index='13' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='13' port='0x7'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x07' function='0x0'/>
+    </controller>
+    <controller type='pci' index='14' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='14' port='0x8'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x08' function='0x0'/>
+    </controller>
+    <controller type='pci' index='15' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='15' port='0x9'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x09' function='0x0'/>
+    </controller>
+    <controller type='pci' index='16' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='16' port='0xa'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0a' function='0x0'/>
+    </controller>
+    <controller type='pci' index='17' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='17' port='0xb'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0b' function='0x0'/>
+    </controller>
+    <controller type='pci' index='18' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='18' port='0xc'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0c' function='0x0'/>
+    </controller>
+    <controller type='pci' index='19' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='19' port='0xd'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0d' function='0x0'/>
+    </controller>
+    <controller type='pci' index='20' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='20' port='0xe'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0e' function='0x0'/>
+    </controller>
+    <controller type='pci' index='21' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='21' port='0xf'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x0f' function='0x0'/>
+    </controller>
+    <controller type='pci' index='22' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='22' port='0x10'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x10' function='0x0'/>
+    </controller>
+    <controller type='pci' index='23' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='23' port='0x11'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x11' function='0x0'/>
+    </controller>
+    <controller type='pci' index='24' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='24' port='0x12'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x12' function='0x0'/>
+    </controller>
+    <controller type='pci' index='25' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='25' port='0x13'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x13' function='0x0'/>
+    </controller>
+    <controller type='pci' index='26' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='26' port='0x14'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x14' function='0x0'/>
+    </controller>
+    <controller type='pci' index='27' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='27' port='0x15'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x15' function='0x0'/>
+    </controller>
+    <controller type='pci' index='28' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='28' port='0x16'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x16' function='0x0'/>
+    </controller>
+    <controller type='pci' index='29' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='29' port='0x17'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x17' function='0x0'/>
+    </controller>
+    <controller type='pci' index='30' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='30' port='0x18'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x18' function='0x0'/>
+    </controller>
+    <controller type='pci' index='31' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='31' port='0x19'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x19' function='0x0'/>
+    </controller>
+    <controller type='pci' index='32' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='32' port='0x1a'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1a' function='0x0'/>
+    </controller>
+    <controller type='pci' index='33' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='33' port='0x1b'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1b' function='0x0'/>
+    </controller>
+    <controller type='pci' index='34' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='34' port='0x1c'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1c' function='0x0'/>
+    </controller>
+    <controller type='pci' index='35' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='35' port='0x1d'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1d' function='0x0'/>
+    </controller>
+    <controller type='pci' index='36' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='36' port='0x1e'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1e' function='0x0'/>
+    </controller>
+    <controller type='pci' index='37' model='pcie-switch-downstream-port'>
+      <model name='xio3130-downstream'/>
+      <target chassis='37' port='0x1f'/>
+      <address type='pci' domain='0x0000' bus='0x05' slot='0x1f' function='0x0'/>
+    </controller>
+    <controller type='sata' index='0'>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>
+    </controller>
+    <interface type='user'>
+      <mac address='52:54:00:f1:95:51'/>
+      <model type='rtl8139'/>
+      <address type='pci' domain='0x0000' bus='0x06' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:5c:c6:1a'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:39:97:ac'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x08' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:ee:b9:a8'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x09' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:a9:f7:17'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:df:2b:f3'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0b' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:78:94:b4'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0c' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:6b:9b:06'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0d' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:17:df:bc'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0e' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:3b:d0:51'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x0f' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:8d:2d:17'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x10' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:a7:66:af'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x11' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:54:ab:d7'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x12' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:1f:99:90'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x13' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:c8:43:87'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x14' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:df:22:b2'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x15' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:d2:9a:47'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x16' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:86:05:e2'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x17' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:8c:1c:c2'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x18' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:48:58:92'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x19' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:99:e5:bf'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1a' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:b1:8c:25'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1b' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:60:e0:d0'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1c' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:37:00:6a'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1d' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:c7:c8:ad'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1e' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:4e:a7:cf'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x1f' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:00:79:69'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x20' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:47:00:6f'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x21' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:2a:8c:8b'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x22' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:ec:d5:e3'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x23' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:7e:6e:c8'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x24' slot='0x00' function='0x0'/>
+    </interface>
+    <interface type='user'>
+      <mac address='52:54:00:7e:6d:c9'/>
+      <model type='e1000'/>
+      <address type='pci' domain='0x0000' bus='0x25' slot='0x00' function='0x0'/>
+    </interface>
+    <input type='mouse' bus='ps2'/>
+    <input type='keyboard' bus='ps2'/>
+    <memballoon model='none'/>
+  </devices>
+</domain>
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 016340b..e986205 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -644,6 +644,13 @@ mymain(void)
     DO_TEST_FULL("pci-expander-bus", WHEN_ACTIVE,
                  QEMU_CAPS_DEVICE_PCI_BRIDGE,
                  QEMU_CAPS_DEVICE_PXB);
+    DO_TEST_FULL("pcie-expander-bus", WHEN_ACTIVE,
+                 QEMU_CAPS_DEVICE_PCI_BRIDGE,
+                 QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
+                 QEMU_CAPS_DEVICE_IOH3420,
+                 QEMU_CAPS_DEVICE_X3130_UPSTREAM,
+                 QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM,
+                 QEMU_CAPS_DEVICE_PXB_PCIE);
 
 
     DO_TEST_FULL("hostdev-scsi-lsi", WHEN_ACTIVE,
-- 
2.5.5




More information about the libvir-list mailing list