]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
irqchip: Have CONFIG_IRQ_MSI_IOMMU be selected by irqchips that need it
authorJason Gunthorpe <jgg@nvidia.com>
Thu, 20 Feb 2025 01:31:39 +0000 (17:31 -0800)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 21 Feb 2025 14:48:38 +0000 (10:48 -0400)
Currently, IRQ_MSI_IOMMU is selected if DMA_IOMMU is available to provide
an implementation for iommu_dma_prepare/compose_msi_msg(). However, it'll
make more sense for irqchips that call prepare/compose to select it, and
that will trigger all the additional code and data to be compiled into
the kernel.

If IRQ_MSI_IOMMU is selected with no IOMMU side implementation, then the
prepare/compose() will be NOP stubs.

If IRQ_MSI_IOMMU is not selected by an irqchip, then the related code on
the iommu side is compiled out.

Link: https://patch.msgid.link/r/a2620f67002c5cdf974e89ca3bf905f5c0817be6.1740014950.git.nicolinc@nvidia.com
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/Kconfig
drivers/iommu/dma-iommu.c
drivers/irqchip/Kconfig
kernel/irq/Kconfig

index ec1b5e32b9725bc1104d10e5d7a32af7b211b50a..5124e7431fe31550fafa835a09be725270aa3316 100644 (file)
@@ -154,7 +154,6 @@ config IOMMU_DMA
        select DMA_OPS_HELPERS
        select IOMMU_API
        select IOMMU_IOVA
-       select IRQ_MSI_IOMMU
        select NEED_SG_DMA_LENGTH
        select NEED_SG_DMA_FLAGS if SWIOTLB
 
index 3b58244e6344a59165bfc8104c69b36c2360797f..94263ed2c5644b18ff112bcb0bce831c70c1ab42 100644 (file)
@@ -449,8 +449,10 @@ void iommu_put_dma_cookie(struct iommu_domain *domain)
        struct iommu_dma_cookie *cookie = domain->iova_cookie;
        struct iommu_dma_msi_page *msi, *tmp;
 
+#if IS_ENABLED(CONFIG_IRQ_MSI_IOMMU)
        if (domain->sw_msi != iommu_dma_sw_msi)
                return;
+#endif
 
        if (!cookie)
                return;
index c11b9965c4ad9bc5b020629253fcae543f7f74dc..64658a1c3aa18be9d8479a083c5d6f9265689c71 100644 (file)
@@ -28,6 +28,7 @@ config ARM_GIC_V2M
        select ARM_GIC
        select IRQ_MSI_LIB
        select PCI_MSI
+       select IRQ_MSI_IOMMU
 
 config GIC_NON_BANKED
        bool
@@ -38,12 +39,14 @@ config ARM_GIC_V3
        select PARTITION_PERCPU
        select GENERIC_IRQ_EFFECTIVE_AFF_MASK if SMP
        select HAVE_ARM_SMCCC_DISCOVERY
+       select IRQ_MSI_IOMMU
 
 config ARM_GIC_V3_ITS
        bool
        select GENERIC_MSI_IRQ
        select IRQ_MSI_LIB
        default ARM_GIC_V3
+       select IRQ_MSI_IOMMU
 
 config ARM_GIC_V3_ITS_FSL_MC
        bool
@@ -408,6 +411,7 @@ config LS_EXTIRQ
 
 config LS_SCFG_MSI
        def_bool y if SOC_LS1021A || ARCH_LAYERSCAPE
+       select IRQ_MSI_IOMMU
        depends on PCI_MSI
 
 config PARTITION_PERCPU
index 5432418c0feafbf58e88ba6d0f88a28ccda9ebeb..9636aed20401b363152c9afb56f18a42b0a6c864 100644 (file)
@@ -100,6 +100,7 @@ config GENERIC_MSI_IRQ
        bool
        select IRQ_DOMAIN_HIERARCHY
 
+# irqchip drivers should select this if they call iommu_dma_prepare_msi()
 config IRQ_MSI_IOMMU
        bool