Re: [patch 21/32] NTB/msi: Convert to msi_on_each_desc()
From: Jason Gunthorpe <jgg@nvidia.com>
Date: 2021-11-29 23:31:52
Also in:
linux-s390, lkml
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