]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iommu/arm-smmu-v3: Add an inline arm_smmu_domain_free()
authorNicolin Chen <nicolinc@nvidia.com>
Tue, 17 Mar 2026 07:59:18 +0000 (00:59 -0700)
committerWill Deacon <will@kernel.org>
Thu, 19 Mar 2026 15:08:21 +0000 (15:08 +0000)
There will be a bit more things to free than smmu_domain itself. So keep a
simple inline function in the header to share aross files.

Suggested-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Acked-by: Balbir Singh <balbirs@nvidia.com>
Reviewed-by: Pranjal Shrivastava <praan@google.com>
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Will Deacon <will@kernel.org>
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c
drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h

index 6097f1f540d877f9cec01b1d1a18f436612f2874..440ad8cc07de28d4c444a42232e96ca9863c45de 100644 (file)
@@ -197,7 +197,8 @@ static void arm_smmu_mm_release(struct mmu_notifier *mn, struct mm_struct *mm)
 
 static void arm_smmu_mmu_notifier_free(struct mmu_notifier *mn)
 {
-       kfree(container_of(mn, struct arm_smmu_domain, mmu_notifier));
+       arm_smmu_domain_free(
+               container_of(mn, struct arm_smmu_domain, mmu_notifier));
 }
 
 static const struct mmu_notifier_ops arm_smmu_mmu_notifier_ops = {
@@ -365,6 +366,6 @@ struct iommu_domain *arm_smmu_sva_domain_alloc(struct device *dev,
 err_asid:
        xa_erase(&arm_smmu_asid_xa, smmu_domain->cd.asid);
 err_free:
-       kfree(smmu_domain);
+       arm_smmu_domain_free(smmu_domain);
        return ERR_PTR(ret);
 }
index 117979c96b762680f7e8b87ae920990b7131b041..375f2143efc1d3ed4a86ed4d020d9f8498ceaea1 100644 (file)
@@ -2559,7 +2559,7 @@ static void arm_smmu_domain_free_paging(struct iommu_domain *domain)
                        ida_free(&smmu->vmid_map, cfg->vmid);
        }
 
-       kfree(smmu_domain);
+       arm_smmu_domain_free(smmu_domain);
 }
 
 static int arm_smmu_domain_finalise_s1(struct arm_smmu_device *smmu,
@@ -3427,7 +3427,7 @@ arm_smmu_domain_alloc_paging_flags(struct device *dev, u32 flags,
        return &smmu_domain->domain;
 
 err_free:
-       kfree(smmu_domain);
+       arm_smmu_domain_free(smmu_domain);
        return ERR_PTR(ret);
 }
 
index 24894b16300457f01baf40dbf0fba8631faf7c71..cfbedb76c8baa2c4064c46d7b1cdb48e1a03f26f 100644 (file)
@@ -956,6 +956,11 @@ extern struct mutex arm_smmu_asid_lock;
 
 struct arm_smmu_domain *arm_smmu_domain_alloc(void);
 
+static inline void arm_smmu_domain_free(struct arm_smmu_domain *smmu_domain)
+{
+       kfree(smmu_domain);
+}
+
 void arm_smmu_clear_cd(struct arm_smmu_master *master, ioasid_t ssid);
 struct arm_smmu_cd *arm_smmu_get_cd_ptr(struct arm_smmu_master *master,
                                        u32 ssid);