return NULL;
}
-static int
+int
virDomainDefMaybeAddController(virDomainDefPtr def,
int type,
int idx,
virDomainVcpuPinDefPtr virDomainLookupVcpuPin(virDomainDefPtr def,
int vcpuid);
+int
+virDomainDefMaybeAddController(virDomainDefPtr def,
+ int type,
+ int idx,
+ int model);
+
char *virDomainDefGetDefaultEmulator(virDomainDefPtr def, virCapsPtr caps);
#endif /* __DOMAIN_CONF_H */
virDomainDefGenSecurityLabelDef;
virDomainDefGetDefaultEmulator;
virDomainDefGetSecurityLabelDef;
+virDomainDefMaybeAddController;
virDomainDefParseFile;
virDomainDefParseNode;
virDomainDefParseString;
struct _qemuDomainPCIAddressSet {
qemuDomainPCIAddressBus *used;
virDevicePCIAddress lastaddr;
+ size_t nbuses; /* allocation of 'used' */
};
static bool qemuPCIAddressValidate(qemuDomainPCIAddressSetPtr addrs ATTRIBUTE_UNUSED,
virDevicePCIAddressPtr addr)
{
+ if (addrs->nbuses == 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s", _("No PCI buses available"));
+ return false;
+ }
if (addr->domain != 0) {
virReportError(VIR_ERR_XML_ERROR, "%s",
_("Only PCI domain 0 is available"));
qemuDomainObjPrivatePtr priv = NULL;
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE)) {
- if (!(addrs = qemuDomainPCIAddressSetCreate(def)))
+ int nbuses = 0;
+ int i;
+
+ for (i = 0; i < def->ncontrollers; i++) {
+ if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI)
+ nbuses++;
+ }
+
+ if (!(addrs = qemuDomainPCIAddressSetCreate(def, nbuses)))
goto cleanup;
if (qemuAssignDevicePCISlots(def, qemuCaps, addrs) < 0)
return qemuDomainAssignPCIAddresses(def, qemuCaps, obj);
}
-qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def)
+qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
+ unsigned int nbuses)
{
qemuDomainPCIAddressSetPtr addrs;
+ int i;
if (VIR_ALLOC(addrs) < 0)
goto no_memory;
- if (VIR_ALLOC_N(addrs->used, 1) < 0)
+ if (VIR_ALLOC_N(addrs->used, nbuses) < 0)
goto no_memory;
+ addrs->nbuses = nbuses;
+
+ /* reserve slot 0 in every bus - it's used by the host bridge on bus 0
+ * and unusable on PCI bridges */
+ for (i = 0; i < nbuses; i++)
+ addrs->used[i][0] = 0xFF;
+
if (virDomainDeviceInfoIterate(def, qemuCollectPCIAddress, addrs) < 0)
goto error;
virDevicePCIAddressPtr addrptr;
unsigned int *func = &tmp_addr.function;
-
- /* Reserve slot 0 for the host bridge */
- memset(&tmp_addr, 0, sizeof(tmp_addr));
- if (qemuDomainPCIAddressReserveSlot(addrs, &tmp_addr) < 0)
- goto error;
-
/* Verify that first IDE and USB controllers (if any) is on the PIIX3, fn 1 */
for (i = 0; i < def->ncontrollers ; i++) {
/* First IDE controller lives on the PIIX3 at slot=1, function=1 */
/* PIIX3 (ISA bridge, IDE controller, something else unknown, USB controller)
* hardcoded slot=1, multifunction device
*/
- memset(&tmp_addr, 0, sizeof(tmp_addr));
- tmp_addr.slot = 1;
- for (*func = 0; *func < QEMU_PCI_ADDRESS_FUNCTION_LAST; (*func)++) {
- if ((*func == 1 && reservedIDE) ||
- (*func == 2 && reservedUSB))
- /* we have reserved this pci address */
- continue;
+ if (addrs->nbuses) {
+ memset(&tmp_addr, 0, sizeof(tmp_addr));
+ tmp_addr.slot = 1;
+ for (*func = 0; *func < QEMU_PCI_ADDRESS_FUNCTION_LAST; (*func)++) {
+ if ((*func == 1 && reservedIDE) ||
+ (*func == 2 && reservedUSB))
+ /* we have reserved this pci address */
+ continue;
- if (qemuDomainPCIAddressReserveAddr(addrs, &tmp_addr) < 0)
- goto error;
+ if (qemuDomainPCIAddressReserveAddr(addrs, &tmp_addr) < 0)
+ goto error;
+ }
}
if (def->nvideos > 0) {
/* Device controllers (SCSI, USB, but not IDE, FDC or CCID) */
for (i = 0; i < def->ncontrollers ; i++) {
+ /* PCI root has no address */
+ if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI)
+ continue;
/* FDC lives behind the ISA bridge; CCID is a usb device */
if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_FDC ||
def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_CCID)
int qemuDomainAssignPCIAddresses(virDomainDefPtr def,
virQEMUCapsPtr qemuCaps,
virDomainObjPtr obj);
-qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def);
+qemuDomainPCIAddressSetPtr qemuDomainPCIAddressSetCreate(virDomainDefPtr def,
+ unsigned int nbuses);
int qemuDomainPCIAddressReserveSlot(qemuDomainPCIAddressSetPtr addrs,
virDevicePCIAddressPtr addr);
int qemuDomainPCIAddressReserveAddr(qemuDomainPCIAddressSetPtr addrs,
virCapsPtr caps,
void *opaque ATTRIBUTE_UNUSED)
{
+ bool addPCIRoot = false;
+
/* check for emulator and create a default one if needed */
if (!def->emulator &&
!(def->emulator = virDomainDefGetDefaultEmulator(def, caps)))
return -1;
+ /* Add implicit PCI root controller if the machine has one */
+ switch (def->os.arch) {
+ case VIR_ARCH_I686:
+ case VIR_ARCH_X86_64:
+ if (!def->os.machine)
+ break;
+ if (STRPREFIX(def->os.machine, "pc-q35") ||
+ STREQ(def->os.machine, "q35") ||
+ STREQ(def->os.machine, "isapc"))
+ break;
+ if (!STRPREFIX(def->os.machine, "pc-0.") &&
+ !STRPREFIX(def->os.machine, "pc-1.") &&
+ !STREQ(def->os.machine, "pc") &&
+ !STRPREFIX(def->os.machine, "rhel"))
+ break;
+ addPCIRoot = true;
+ break;
+
+ case VIR_ARCH_ALPHA:
+ case VIR_ARCH_PPC:
+ case VIR_ARCH_PPC64:
+ case VIR_ARCH_PPCEMB:
+ case VIR_ARCH_SH4:
+ case VIR_ARCH_SH4EB:
+ addPCIRoot = true;
+ break;
+ default:
+ break;
+ }
+
+ if (addPCIRoot &&
+ virDomainDefMaybeAddController(
+ def, VIR_DOMAIN_CONTROLLER_TYPE_PCI, 0,
+ VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) < 0)
+ return -1;
+
return 0;
}
if ((flags & VIR_DOMAIN_XML_MIGRATABLE)) {
int i;
- virDomainControllerDefPtr usb = NULL;
+ int remove = 0;
+ virDomainControllerDefPtr usb = NULL, pci = NULL;
/* If only the default USB controller is present, we can remove it
* and make the XML compatible with older versions of libvirt which
if (usb && usb->idx == 0 && usb->model == -1) {
VIR_DEBUG("Removing default USB controller from domain '%s'"
" for migration compatibility", def->name);
+ remove++;
+ } else {
+ usb = NULL;
+ }
+
+ /* Remove the default PCI controller if there is only one present
+ * and its model is pci-root */
+ for (i = 0; i < def->ncontrollers; i++) {
+ if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
+ if (pci) {
+ pci = NULL;
+ break;
+ }
+ pci = def->controllers[i];
+ }
+ }
+
+ if (pci && pci->idx == 0 &&
+ pci->model == VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT) {
+ VIR_DEBUG("Removing default 'pci-root' from domain '%s'"
+ " for migration compatibility", def->name);
+ remove++;
+ } else {
+ pci = NULL;
+ }
+
+ if (remove) {
controllers = def->controllers;
ncontrollers = def->ncontrollers;
- if (VIR_ALLOC_N(def->controllers, ncontrollers - 1) < 0) {
+ if (VIR_ALLOC_N(def->controllers, ncontrollers - remove) < 0) {
controllers = NULL;
virReportOOMError();
goto cleanup;
def->ncontrollers = 0;
for (i = 0; i < ncontrollers; i++) {
- if (controllers[i] != usb)
+ if (controllers[i] != usb && controllers[i] != pci)
def->controllers[def->ncontrollers++] = controllers[i];
}
}
+
+
}
ret = virDomainDefFormatInternal(def, flags, buf);
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='fdc' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='fdc' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='00:11:22:33:44:55'/>
<model type='virtio'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<channel type='pipe'>
<source path='/tmp/guestfwd'/>
<target type='guestfwd' address='10.0.2.1' port='4600'/>
<controller type='virtio-serial' index='1'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</controller>
+ <controller type='pci' index='0' model='pci-root'/>
<channel type='pty'>
<target type='virtio' name='org.linux-kvm.port.foo'/>
<address type='virtio-serial' controller='1' bus='0' port='3'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='virtio-serial' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<target dev='vdb' bus='virtio'/>
</disk>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<target dev='vdb' bus='virtio'/>
</disk>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='fdc' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='scsi' index='0' model='lsilogic'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='scsi' index='0' model='virtio-scsi'/>
<controller type='scsi' index='1' model='lsilogic'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='scsi' index='0' model='virtio-scsi'/>
<controller type='scsi' index='1' model='lsilogic'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='ide' index='0'/>
<controller type='scsi' index='0' model='lsisas1078'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='ide' index='0'/>
<controller type='scsi' index='0' model='virtio-scsi'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='ide' index='0'/>
<controller type='scsi' index='0' model='ibmvscsi'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='ide' index='1'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='scsi' index='0' model='virtio-scsi'>
<driver queues='8'/>
</controller>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</disk>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='52:54:00:e5:48:58'/>
<model type='virtio'/>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='fdc' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5903' autoport='no'>
<listen type='network' network='Bobsnetwork'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='sdl' display=':0.1' xauth='/root/.Xauthority' fullscreen='yes'/>
<video>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='sdl' display=':0.1' xauth='/root/.Xauthority'/>
<video>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='spice' port='5903' tlsPort='5904' autoport='no' listen='127.0.0.1' defaultMode='secure'>
<listen type='address' address='127.0.0.1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' socket='/tmp/foo.socket'/>
<video>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5903' autoport='no' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='5903' autoport='no' listen='2001:1:2:3:4:5:1234:1234'>
<listen type='address' address='2001:1:2:3:4:5:1234:1234'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0000' bus='0x06' slot='0x12' function='0x5'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<hostdev mode='subsystem' type='usb' managed='no'>
<source>
<address bus='14' device='6'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='usb'/>
<memballoon model='virtio'/>
</devices>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='tablet' bus='usb'/>
<memballoon model='virtio'/>
</devices>
<devices>
<emulator>/usr/bin/kvm</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<lease>
<lockspace>somearea</lockspace>
<key>thequickbrownfoxjumpedoverthelazydog</key>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='virtio-serial' index='0'>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='network'>
<mac address='52:54:00:24:a5:9f'/>
<source network='default'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='ethernet'>
<mac address='00:11:22:33:44:55'/>
<script path='/etc/qemu-ifup'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='ethernet'>
<mac address='00:11:22:33:44:55'/>
<script path='/etc/qemu-ifup'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='hostdev' managed='yes'>
<mac address='00:11:22:33:44:55'/>
<source>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='network'>
<mac address='00:11:22:33:44:55'/>
<source network='ovs-net'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='00:11:22:33:44:55'/>
<model type='rtl8139'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='00:11:22:33:44:55'/>
<model type='virtio'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='network'>
<mac address='00:11:22:33:44:55'/>
<source network='rednet' portgroup='bob'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='00:11:22:33:44:55'/>
<model type='virtio'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<parallel type='tcp'>
<source mode='bind' host='127.0.0.1' service='9999'/>
<protocol type='raw'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='52:54:00:24:a5:9f'/>
<model type='virtio'/>
<devices>
<emulator>/usr/bin/qemu-system-ppc64</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
<nvram>
<address type='spapr-vio' reg='0x4000'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
<qemu:commandline>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
<seclabel type='dynamic' model='selinux' relabel='yes'>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
<seclabel type='dynamic' model='selinux' relabel='yes'>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
<seclabel type='none'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
<seclabel type='static' model='selinux' relabel='no'>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='dev'>
<source path='/dev/ttyS2'/>
<target port='0'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='file'>
<source path='/tmp/serial.log'/>
<target port='0'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='tcp'>
<source mode='bind' host='127.0.0.1' service='9999'/>
<protocol type='telnet'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='tcp'>
<source mode='connect' host='127.0.0.1' service='9999'/>
<protocol type='raw'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='udp'>
<source mode='bind' host='127.0.0.1' service='9999'/>
<source mode='connect' host='127.0.0.1' service='9998'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='unix'>
<source mode='connect' path='/tmp/serial.sock'/>
<target port='0'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='vc'>
<target port='0'/>
</serial>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<sound model='pcspk'/>
<sound model='es1370'/>
<sound model='sb16'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<sound model='pcspk'/>
<sound model='es1370'/>
<sound model='sb16'/>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<tpm model='tpm-tis'>
<backend type='passthrough'>
<device path='/dev/tpm0'/>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
</controller>
+ <controller type='pci' index='0' model='pci-root'/>
<redirdev bus='usb' type='tcp'>
<source mode='connect' host='localhost' service='4000'/>
<protocol type='raw'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='user'>
<mac address='52:54:00:e5:48:58'/>
<model type='virtio'/>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
<rng model='virtio'>
<backend model='egd' type='tcp'>
<devices>
<emulator>/usr/bin/qemu</emulator>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
<rng model='virtio'>
<rate bytes='123' period='1234'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<watchdog model='ib700' action='poweroff'/>
<memballoon model='virtio'/>
</devices>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</controller>
<controller type='virtio-serial' index='2'/>
+ <controller type='pci' index='0' model='pci-root'/>
<channel type='pty'>
<target type='virtio' name='org.linux-kvm.port.0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='virtio-serial' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<console type='pty'>
<target type='virtio' port='0'/>
</console>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
<controller type='scsi' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport='yes' listen='1.2.3.4'>
<listen type='address' address='1.2.3.4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<interface type='ethernet'>
<mac address='52:54:00:71:70:89'/>
<script path='/etc/qemu-ifup'/>
</disk>
<controller type='usb' index='0'/>
<controller type='ide' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>
</disk>
<controller type='ide' index='0'/>
<controller type='usb' index='0'/>
+ <controller type='pci' index='0' model='pci-root'/>
<serial type='pty'>
<target port='0'/>
</serial>
<controller type='usb' index='2' model='ich9-uhci2'>
<master startport='2'/>
</controller>
+ <controller type='pci' index='0' model='pci-root'/>
<memballoon model='virtio'/>
</devices>
</domain>