On Wed, Nov 19 2014 at 6:57:25 am GMT, "Yun Wu (Abel)" <wuyun...@huawei.com> wrote: > On 2014/11/18 22:32, Thomas Gleixner wrote: > >> On Tue, 18 Nov 2014, Yun Wu (Abel) wrote: >> >> Can you please trim the messages when you're replying? >> >>> The above you described is absolutely right, but not the things I want >>> to know. :) >>> Take GICv3 ITS for example, it deals with both PCI and non PCI message >>> interrupts. IIUC, several irq_chips need to be implemented in the ITS >>> driver (i.e. pci_msi_chip, A_msi_chip and B_msi_chip). What should we >>> do to the ITS driver if new MSI-capable devices come out? >> >> You seem to miss the stacking here >> >> PCI-MSI -> >> A-MSI -> ITS -> GIC >> B-MSI -> >> >> So each of the device types has its own MSI controller. Each of them >> will have their own callbacks and are backed by the underlying ITS/GIC >> implementation. > > Yes, this hits the key point. Once a new device type becomes available, > we need to add pieces of code outside the new device's driver to make > it work, which in my opinion is due to lack of core infrastructure. > More specifically, the core infrastructure needs to support mechanism > of MSI, not the various types of devices. > >> >> And that's the only sensible solution. >> > > It's sensible, but not perfect. > What I suggested is to add a generic layer: > > PCI-MSI -> > A-MSI -> (generic layer) -> ITS -> GICR > B-MSI -> > > The PCI/A/B/... passes its hardware properties to the generic layer which > gets configurations ready by calling ITS's domain/chip callbacks. When > a new device type arrives, the only thing need to do is to implement the > driver of that device, with nothing to do with the generic layer or ITS.
I really don't get your "generic layer" story. To me, it looks like a glorified set of function pointers. And that's exactly what stacked domains are giving you: A-MSI -> ITS -> GIC This "A-MSI" is responsible for: - implementing the "prepare" callback, which allocates the ITT - implementing the "irq_compose_msi_msg" Hardly anything to change in the ITS driver, and I can probably make it so that you don't even have to write a single line of code in the ITS driver. If the generic MSI layer we now have is not enough for you, then please submit detailed use cases. Thanks, M. -- Jazz is not dead. It just smells funny. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/