conf: new pci controller model pcie-expander-bus

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).
This commit is contained in:
Laine Stump 2016-03-16 13:37:14 -04:00
parent 0ec0bc85d0
commit bc07251f59
9 changed files with 694 additions and 14 deletions

View File

@ -3103,15 +3103,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.4</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.4</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
@ -3173,7 +3176,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
@ -3188,6 +3191,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>&lt;node&gt;</code></dt>
<dd>

View File

@ -1788,6 +1788,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/>
@ -1846,6 +1848,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>

View File

@ -59,8 +59,11 @@ virDomainPCIControllerModelToConnectType(virDomainControllerModelPCI model)
return VIR_PCI_CONNECT_TYPE_PCI_DEVICE;
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).
*/
return VIR_PCI_CONNECT_TYPE_PCIE_DEVICE;
@ -279,6 +282,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);

View File

@ -321,7 +321,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,
@ -331,7 +332,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",

View File

@ -760,6 +760,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;
@ -772,6 +773,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;

View File

@ -1375,6 +1375,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:
@ -1579,6 +1580,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) {

View File

@ -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>

View File

@ -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>

View File

@ -647,6 +647,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,