]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
PCI: endpoint: pci-ep-msi: Add checks for MSI parent and mutability
authorFrank Li <Frank.Li@nxp.com>
Thu, 10 Jul 2025 19:13:50 +0000 (15:13 -0400)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 24 Jul 2025 21:51:37 +0000 (16:51 -0500)
Some MSI controllers can change address/data pair during the execution of
irq_chip::irq_set_affinity() callback. Since the current PCI Endpoint
framework cannot support mutable MSI controllers, call
irq_domain_is_msi_immutable() API to check if the controller is immutable
or not.

Also ensure that the MSI domain is a parent MSI domain so that it can
allocate address/data pairs.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
[mani: reworded error message and commit message]
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Niklas Cassel <cassel@kernel.org>
Link: https://patch.msgid.link/20250710-ep-msi-v21-4-57683fc7fb25@nxp.com
drivers/pci/endpoint/pci-ep-msi.c

index 95a47ce155ace33ca392057f507a2b6351b2c197..9ca89cbfec15dfb05593cb412e4e23a807d49560 100644 (file)
@@ -57,6 +57,14 @@ int pci_epf_alloc_doorbell(struct pci_epf *epf, u16 num_db)
                return -ENODEV;
        }
 
+       if (!irq_domain_is_msi_parent(domain))
+               return -ENODEV;
+
+       if (!irq_domain_is_msi_immutable(domain)) {
+               dev_err(dev, "Mutable MSI controller not supported\n");
+               return -ENODEV;
+       }
+
        dev_set_msi_domain(epc->dev.parent, domain);
 
        msg = kcalloc(num_db, sizeof(struct pci_epf_doorbell_msg), GFP_KERNEL);