iommu: Statically set module owner
authorRobin Murphy <robin.murphy@arm.com>
Thu, 1 Apr 2021 13:56:25 +0000 (14:56 +0100)
committerJoerg Roedel <jroedel@suse.de>
Fri, 16 Apr 2021 15:19:04 +0000 (17:19 +0200)
It happens that the 3 drivers which first supported being modular are
also ones which play games with their pgsize_bitmap, so have non-const
iommu_ops where dynamically setting the owner manages to work out OK.
However, it's less than ideal to force that upon all drivers which want
to be modular - like the new sprd-iommu driver which now has a potential
bug in that regard - so let's just statically set the module owner and
let ops remain const wherever possible.

Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-by: Will Deacon <will@kernel.org>
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/31423b99ff609c3d4b291c701a7a7a810d9ce8dc.1617285386.git.robin.murphy@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
drivers/iommu/arm/arm-smmu/arm-smmu.c
drivers/iommu/sprd-iommu.c
drivers/iommu/virtio-iommu.c
include/linux/iommu.h

index 6f8ffc8..bee7ce2 100644 (file)
@@ -2674,6 +2674,7 @@ static struct iommu_ops arm_smmu_ops = {
        .sva_unbind             = arm_smmu_sva_unbind,
        .sva_get_pasid          = arm_smmu_sva_get_pasid,
        .pgsize_bitmap          = -1UL, /* Restricted during device attach */
+       .owner                  = THIS_MODULE,
 };
 
 /* Probing and initialisation functions */
index 3c6adcd..837a2f1 100644 (file)
@@ -1577,6 +1577,7 @@ static struct iommu_ops arm_smmu_ops = {
        .put_resv_regions       = generic_iommu_put_resv_regions,
        .def_domain_type        = arm_smmu_def_domain_type,
        .pgsize_bitmap          = -1UL, /* Restricted during device attach */
+       .owner                  = THIS_MODULE,
 };
 
 static void arm_smmu_device_reset(struct arm_smmu_device *smmu)
index 3811a50..89272f9 100644 (file)
@@ -436,6 +436,7 @@ static const struct iommu_ops sprd_iommu_ops = {
        .device_group   = sprd_iommu_device_group,
        .of_xlate       = sprd_iommu_of_xlate,
        .pgsize_bitmap  = ~0UL << SPRD_IOMMU_PAGE_SHIFT,
+       .owner          = THIS_MODULE,
 };
 
 static const struct of_device_id sprd_iommu_of_match[] = {
index 2bfdd57..594ed82 100644 (file)
@@ -945,6 +945,7 @@ static struct iommu_ops viommu_ops = {
        .get_resv_regions       = viommu_get_resv_regions,
        .put_resv_regions       = generic_iommu_put_resv_regions,
        .of_xlate               = viommu_of_xlate,
+       .owner                  = THIS_MODULE,
 };
 
 static int viommu_init_vqs(struct viommu_dev *viommu)
index 9223a82..ce904cf 100644 (file)
@@ -361,19 +361,12 @@ int  iommu_device_link(struct iommu_device   *iommu, struct device *link);
 void iommu_device_unlink(struct iommu_device *iommu, struct device *link);
 int iommu_deferred_attach(struct device *dev, struct iommu_domain *domain);
 
-static inline void __iommu_device_set_ops(struct iommu_device *iommu,
+static inline void iommu_device_set_ops(struct iommu_device *iommu,
                                          const struct iommu_ops *ops)
 {
        iommu->ops = ops;
 }
 
-#define iommu_device_set_ops(iommu, ops)                               \
-do {                                                                   \
-       struct iommu_ops *__ops = (struct iommu_ops *)(ops);            \
-       __ops->owner = THIS_MODULE;                                     \
-       __iommu_device_set_ops(iommu, __ops);                           \
-} while (0)
-
 static inline void iommu_device_set_fwnode(struct iommu_device *iommu,
                                           struct fwnode_handle *fwnode)
 {