On Fri, Jan 11, 2013 at 04:45:16PM +0100, Thierry Reding wrote: > On Fri, Jan 11, 2013 at 03:36:14PM +0000, Arnd Bergmann wrote: > > On Friday 11 January 2013, Thierry Reding wrote: > > > Right, it'll need #ifdefs around the arch_{setup,teardown}_msi_irq(). Or > > > select PCI_MSI unconditionally. Once this is merged I was going to post > > > a patch that enables PCI_MSI in tegra_defconfig anyway. But it might be > > > better to keep it optional anyway since the remainder of the code copes > > > with it properly. > > > > > Actually, we need something better than that. You cannot define > > arch_setup_msi_irq in a tegra specific pci host driver, because that > > will seriously mess up other platforms in multiplatform configurations > > by giving a link error when they also define this function, or with a > > run-time error when they don't support it. > > > > I think what we should do here is fix it the right way by adding > > a pci host specific callback rather than an architecture specific > > callback in drivers/pci/msi.c. There is already a default version > > of arch_setup_msi_irqs (with s), and we can probably do the > > same for arch_setup_msi_irq (without s) to fall back to the > > arch version for most architectures. > > Most architectures (at least powerpc, sparc, ia64 and x86) already > > multiplex the msi handlers internally, but ARM does not because > > there is only one implementation (iop33x) at the moment. > > > > We can add a generix multiplex and then move architectures over to > > use it. > > I already hinted at that in one of the other subthreads. Having such a > multiplex would also allow the driver to be built as a module. I had > already thought about this when I was working on an earlier version of > these patches. Basically these would be two ops attached to the host > bridge, and the generic arch_setup_msi_irq() could then look that up > given the struct pci_dev that is passed to it and call this new per- > host bridge .setup_msi_irq(). struct pci_ops looks like a good place to put these. They'll be available from each struct pci_bus, so should be easy to call from arch_setup_msi_irq(). Any objections? Thierry
Attachment:
pgphRD3no1vWJ.pgp
Description: PGP signature