On Fri, Apr 12, 2013 at 11:46:15AM -0400, Laine Stump wrote: > On 04/11/2013 07:23 AM, Michael S. Tsirkin wrote: > > On Thu, Apr 11, 2013 at 07:03:56AM -0400, Laine Stump wrote: > >> On 04/10/2013 05:26 AM, Daniel P. Berrange wrote: > >>>>> > >>>>> So if we later allowed for mutiple PCI roots, then we'd have something > >>>>> like > >>>>> > >>>>> <controller type="pci-root" index="0"> > >>>>> <model name="i440FX"/> > >>>>> </controller> > >>>>> <controller type="pci-root" index="1"> > >>>>> <model name="i440FX"/> > >>>>> </controller> > >>>>> <controller type="pci" index="0"> <!-- Host bridge 1 --> > >>>>> <address type='pci' domain='0' bus='0' slot='0''/> > >>>>> </controller> > >>>>> <controller type="pci" index="0"> <!-- Host bridge 2 --> > >>>>> <address type='pci' domain='1' bus='0' slot='0''/> > >>>>> </controller> > > > There is a problem here - within a given controller type, we will now > have the possibility of multiple controllers with the same index - the > differentiating attribute will be in the <address> subelement, which > could create some awkwardness. Maybe instead this should be handled with > a different model of pci controller, and we can add a "domain" attribute > at the toplevel rather than specifying an <address>? IIUC there is a limit on the number of PCI buses you can create per domain, due to fixed size of PCI addresses. Google suggests to me the limit is 256. So for domain 1, we could just start index at 256, and domain 2 at 512, etc > Comment: I'm not quite convinced that we really need the separate > "pci-root" device. Since 1) every pci-root will *always* have either a > pcie-root-bus or a pci-bridge connected to it, 2) the pci-root-bus will > only ever be connected to the pci-root, and 3) the pci-bridge that > connects to it will need special handling within the pci-bridge case > anyway, why not: > > 1) eliminate the separate pci-root controller type Ok, lets leave it out - we can always add it later if desired. > 2) within <controller type='pci'>, a new <model type='pci-root-bus'/> > will be added. > > 3) a pcie-root-bus will automatically be added for q35 machinetypes, and > pci-root-bus for any machinetype that supports a PCI bus (e.g. "pc-*") > > 4) model type='pci-root-bus' will behave like pci-bridge, except that it > will be an implicit device (nothing on qemu commandline) and it won't > need an <address> element (neither will pcie-root-bus). > > 5) to support multiple domains, we can simply add a "domain" attribute > to the toplevel of controller. Or use index numbers modulo 256 to identify domain numbers. One note on q35 - we need to make sure whatever we do in terms of creating default <controller>s in the XML 'just works' for applications. eg if they define a guest using <type machine="q35">hvm</type>, and then add a <interface>, it should do the right thing wrt PCI addressing/connectivity. We must not require applications to manually add <controller> elements for q35 for things to work. Adding <controller>s must purely be an opt-in for apps which have the detailed knowledge rquired & need full control over bus layout. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list