On Thu, Jul 09, 2015 at 03:35:05PM +0100, Marc Zyngier wrote: [...] > > BTW, is there a reason why _all_ arm host bridges rely on > > pcibios_msi_controller (so pci_sys_data) instead of initializing > > the struct pci_bus.msi pointer to carry out the MSI controller look-up ? > > Probably an ordering issue - the bus may not be there yet. But ensuring > that the MSI domain is created early (before the bus is scanned) should > solve that problem nicely enough. Yes, I think the only reason is that, as sysdata, the msi controller pointer is propagated (in pci_alloc_child_bus()), with a tiny difference: sysdata can be passed to pci_scan_root_bus(), msi controller pointer can't (explicitly) at present. Since most of the ARM PCI host controllers have been converted to: - pci_create_root_bus() -> here we can init bus msi controller pointer - pci_scan_child_bus() we could get rid of pcibios_msi_controller on arm _now_ by just initializing the msi controller pointer in the struct pci_bus before pci_scan_child_bus() is called, unless I am missing something. I converted pcie-designware.c to stacked domains (and pci-keystone that relies on it, with its own quirks of course), I might take the step above as an intermediate step to have a common arm/arm64 generic host controller asap (ie for that getting rid of pcibios_msi_controller is mandatory, which requires converting all ARM host controllers to stacked domains, or taking the intermediate step above). Thanks, Lorenzo -- To unsubscribe from this list: send the line "unsubscribe linux-pci" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html