Check the immutability of the MSI address/data pair by calling irq_domain_is_msi_immutable() when allocating a doorbell. Prevent the use of MSI controllers that change the address/data pair during irq_set_affinity(), as the current PCI endpoint implementation does not support such behavior. Signed-off-by: Frank Li <Frank.Li@xxxxxxx> --- Change from v11 to v12 - use helper function irq_domain_is_msi_immutable(). - remove msi parent check. - split msi header, its and endpoint to 3 patches. - rework commit message. Change from v9 to v11 - new patch --- drivers/pci/endpoint/pci-ep-msi.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/pci/endpoint/pci-ep-msi.c b/drivers/pci/endpoint/pci-ep-msi.c index b0a91fde202f3..eda027b734b73 100644 --- a/drivers/pci/endpoint/pci-ep-msi.c +++ b/drivers/pci/endpoint/pci-ep-msi.c @@ -107,6 +107,11 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db) return -EINVAL; } + if (!irq_domain_is_msi_immutable(dom)) { + dev_err(dev, "Can't support mutable address/data pair MSI controller\n"); + return -EINVAL; + } + dev_set_msi_domain(dev, dom); msg = kcalloc(num_db, sizeof(struct pci_epf_doorbell_msg), GFP_KERNEL); -- 2.34.1