On Wed, Apr 19, 2017 at 09:41:42AM +0100, Peter Maydell wrote: > On 18 April 2017 at 23:17, Eduardo Habkost <ehabk...@redhat.com> wrote: > > pci_bus_new*() and pci_register_bus() work only when the 'parent' > > argument is a PCI_HOST_BRIDGE object. Rename them to reflect that they > > are meant to initialize a bus that's in a PCI host bridge. > > > > The new function names are: > > * pci_host_bus_init() (replacing pci_bus_new()) > > * pci_host_bus_init_inplace() (replacing pci_bus_new_inplace()) > > * pci_host_bus_init_irqs() (replacing pci_register_bus()) > > This is moving these functions away from the convention that > we seem to mostly follow for buses (eg ISA, SCSI) of > foo_bus_new() to allocate and return a new bus, and > foo_bus_new_inplace() to initialize a bus that's inline in > some other struct. > > I'm not sure this is a good idea unless we have a plan to > convert all the other QOM buses and document that this is > the right way to implement init for a bus.
The point of the rename is that those functions are doing more than just allocating a PCIBus. They do some initialization of PCIHostState as well. That's why non-root PCI buses can't be created by pci_bus_new*() today. Maybe the answer here is to move the PCI_HOST_BRIDGE-specific code somewhere else, and make pci_bus_new*() more generic. This would allow us to reuse pci_bus_new*() when creating non-root PCI buses, later. -- Eduardo