]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PCI/MSI: Export pci_msix_prepare_desc() for dynamic MSI-X allocations
authorShradha Gupta <shradhagupta@linux.microsoft.com>
Wed, 11 Jun 2025 14:10:01 +0000 (07:10 -0700)
committerShradha Gupta <shradhagupta@linux.microsoft.com>
Tue, 17 Jun 2025 06:15:14 +0000 (06:15 +0000)
For supporting dynamic MSI-X vector allocation by PCI controllers, enabling
the flag MSI_FLAG_PCI_MSIX_ALLOC_DYN is not enough, msix_prepare_msi_desc()
to prepare the MSI descriptor is also needed.

Export pci_msix_prepare_desc() to allow PCI controllers to support dynamic
MSI-X vector allocation.

Signed-off-by: Shradha Gupta <shradhagupta@linux.microsoft.com>
Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Saurabh Sengar <ssengar@linux.microsoft.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/msi/irqdomain.c
include/linux/msi.h

index c05152733993b8e3bc9551a10e2e31132e46b198..765312c92d9b29d40708a89a60e3bae11d4902ae 100644 (file)
@@ -222,13 +222,14 @@ static void pci_irq_unmask_msix(struct irq_data *data)
        pci_msix_unmask(irq_data_get_msi_desc(data));
 }
 
-static void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
-                                 struct msi_desc *desc)
+void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
+                          struct msi_desc *desc)
 {
        /* Don't fiddle with preallocated MSI descriptors */
        if (!desc->pci.mask_base)
                msix_prepare_msi_desc(to_pci_dev(desc->dev), desc);
 }
+EXPORT_SYMBOL_GPL(pci_msix_prepare_desc);
 
 static const struct msi_domain_template pci_msix_template = {
        .chip = {
index 6863540f4b71778fe505f65fb6eca5680d035c3b..7f254bde5426d63690f39b53b3d90ac4debf9c75 100644 (file)
@@ -706,6 +706,8 @@ struct irq_domain *pci_msi_create_irq_domain(struct fwnode_handle *fwnode,
                                             struct irq_domain *parent);
 u32 pci_msi_domain_get_msi_rid(struct irq_domain *domain, struct pci_dev *pdev);
 struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev);
+void pci_msix_prepare_desc(struct irq_domain *domain, msi_alloc_info_t *arg,
+                          struct msi_desc *desc);
 #else /* CONFIG_PCI_MSI */
 static inline struct irq_domain *pci_msi_get_device_domain(struct pci_dev *pdev)
 {