]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu: Hide ops.domain_alloc behind CONFIG_FSL_PAMU
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 8 Apr 2025 16:35:51 +0000 (13:35 -0300)
committerJoerg Roedel <jroedel@suse.de>
Mon, 28 Apr 2025 11:14:59 +0000 (13:14 +0200)
fsl_pamu is the last user of domain_alloc(), and it is using it to create
something weird that doesn't really fit into the iommu subsystem
architecture. It is a not a paging domain since it doesn't have any
map/unmap ops. It may be some special kind of identity domain.

For now just leave it as is. Wrap it's definition in CONFIG_FSL_PAMU to
discourage any new drivers from attempting to use it.

Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/5-v4-ff5fb6b03bd1+288-iommu_virtio_domains_jgg@nvidia.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/iommu.c
include/linux/iommu.h

index 2c4983f07c5c15d8412f981a34f84f1c5a6956a8..3e4a9fe867f510231edf23fcc4e805e53a28bfae 100644 (file)
@@ -2025,8 +2025,10 @@ __iommu_paging_domain_alloc_flags(struct device *dev, unsigned int type,
                domain = ops->domain_alloc_paging(dev);
        else if (ops->domain_alloc_paging_flags)
                domain = ops->domain_alloc_paging_flags(dev, flags, NULL);
+#if IS_ENABLED(CONFIG_FSL_PAMU)
        else if (ops->domain_alloc && !flags)
                domain = ops->domain_alloc(IOMMU_DOMAIN_UNMANAGED);
+#endif
        else
                return ERR_PTR(-EOPNOTSUPP);
 
index 7b636b92ac7ce310c0585f04349b504abd2f11a5..5b64d0242e666e4a0a4c6bdcbaba5a2fe97bd125 100644 (file)
@@ -564,9 +564,7 @@ iommu_copy_struct_from_full_user_array(void *kdst, size_t kdst_entry_size,
  *           op is allocated in the iommu driver and freed by the caller after
  *           use. The information type is one of enum iommu_hw_info_type defined
  *           in include/uapi/linux/iommufd.h.
- * @domain_alloc: allocate and return an iommu domain if success. Otherwise
- *                NULL is returned. The domain is not fully initialized until
- *                the caller iommu_domain_alloc() returns.
+ * @domain_alloc: Do not use in new drivers
  * @domain_alloc_identity: allocate an IDENTITY domain. Drivers should prefer to
  *                         use identity_domain instead. This should only be used
  *                         if dynamic logic is necessary.
@@ -627,7 +625,9 @@ struct iommu_ops {
        void *(*hw_info)(struct device *dev, u32 *length, u32 *type);
 
        /* Domain allocation and freeing by the iommu driver */
+#if IS_ENABLED(CONFIG_FSL_PAMU)
        struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type);
+#endif
        struct iommu_domain *(*domain_alloc_identity)(struct device *dev);
        struct iommu_domain *(*domain_alloc_paging_flags)(
                struct device *dev, u32 flags,