On Mon, Nov 29, 2021 at 03:27:20PM -0700, Logan Gunthorpe wrote: > In most cases, the NTB code needs more interrupts than the hardware > actually provides for in its MSI-X table. That's what PCI_IRQ_VIRTUAL is > for: it allows the driver to request more interrupts than the hardware > advertises (ie. pci_msix_vec_count()). These extra interrupts are > created, but get flagged with msi_attrib.is_virtual which ensures > functions that program the MSI-X table don't try to write past the end > of the hardware's table. AFAICT what you've described is what Intel is calling IMS in other contexts. IMS is fundamentally a way to control MSI interrupt descriptors that are not accessed through PCI SIG compliant means. In this case the NTB driver has to do its magic to relay the addr/data pairs to the real MSI storage in the hidden devices. PCI_IRQ_VIRTUAL should probably be fully replaced by the new dynamic APIs in the fullness of time.. > Existing NTB hardware does already have what's called a doorbell which > provides the same functionally as the above technique. However, existing > hardware implementations of doorbells have significant latency and thus > slow down performance substantially. Implementing the MSI interrupts as > described above increased the performance of ntb_transport by more than > three times[1]. Does the doorbell scheme allow as many interrupts? Jason