On Wed, 2016-08-17 at 07:29 -0400, Laine Stump wrote: > libvirt previously assigned nearly all devices to a hotpluggable > legacy PCI slot even on machines with a PCIe root complex. Doing this > means that the domain will need a dmi-to-pci-bridge (to convert from > PCIe to legacy PCI) and a pci-bridge (to provide hotpluggable legacy > PCI slots. > > To help reduce the need for these legacy controllers, this patch > checks for the QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY capability (if that > capability is present, then all virtio devices will automatically > present as PCIe when attached to a PCIe controller, or PCI when > attached to a legacy PCI controller), and assigns virtio devices to a > hotpluggable PCIe slot instead. > > NB: since the slot must be hotpluggable, and pcie-root (the PCIe root > complex) does *not* support hotplug, this means that suitable > controllers must also be in the config (i.e. either pcie-root-port, or > pcie-downstream-port). For now, libvirt doesn't add those > automatically, so if you put virtio devices in a config for a qemu > that has PCIe-capable virtio devices, you'll need to add extra > pcie-root-ports yourself. That requirement will be eliminated in a > future patch, but for now, it's simple to do this: > > <controller type='pci' model='pcie-root-port'/> > <controller type='pci' model='pcie-root-port'/> > <controller type='pci' model='pcie-root-port'/> > ... > > Partially Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1330024 > --- [...] > diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c > index 3d52d72..73f4241 100644 > --- a/src/qemu/qemu_domain_address.c > +++ b/src/qemu/qemu_domain_address.c > @@ -996,16 +996,25 @@ qemuDomainAssignDevicePCISlots(virDomainDefPtr def, > virDomainPCIAddressSetPtr addrs) > { > size_t i, j; > - virDomainPCIConnectFlags flags = 0; /* initialize to quiet gcc warning */ > + virDomainPCIConnectFlags virtioFlags; > + virDomainPCIConnectFlags pciFlags; > + virDomainPCIConnectFlags pcieFlags; > virPCIDeviceAddress tmp_addr; > + bool havePCIeRoot = false; > > /* PCI controllers */ > for (i = 0; i < def->ncontrollers; i++) { > if (def->controllers[i]->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) { > virDomainControllerModelPCI model = def->controllers[i]->model; > + virDomainPCIConnectFlags flags; > > + flags = virDomainPCIControllerModelToConnectType(model); You moved this function call, but left the comment referring to it in the original position. Please move the comment as well. > diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c > index 7601a5f..ffd1792 100644 > --- a/tests/qemuxml2xmltest.c > +++ b/tests/qemuxml2xmltest.c > @@ -691,6 +691,46 @@ mymain(void) > QEMU_CAPS_ICH9_AHCI, QEMU_CAPS_PCI_MULTIFUNCTION, > QEMU_CAPS_ICH9_USB_EHCI1, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, > QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL); Please carry over the same comment you added to qemuxml2argvtest. > + DO_TEST("q35-pcie", > + QEMU_CAPS_VIRTIO_PCI_DISABLE_LEGACY, > + QEMU_CAPS_DEVICE_VIRTIO_RNG, ACK -- Andrea Bolognani / Red Hat / Virtualization -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list