iommufd: Move putting a hwpt to a helper function
authorJason Gunthorpe <jgg@nvidia.com>
Mon, 17 Jul 2023 18:12:04 +0000 (15:12 -0300)
committerJason Gunthorpe <jgg@nvidia.com>
Wed, 26 Jul 2023 13:19:47 +0000 (10:19 -0300)
Next patch will need to call this from two places.

Link: https://lore.kernel.org/r/8-v8-6659224517ea+532-iommufd_alloc_jgg@nvidia.com
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Tested-by: Nicolin Chen <nicolinc@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommufd/device.c
drivers/iommu/iommufd/iommufd_private.h

index 4b41ef5..89cef2d 100644 (file)
@@ -526,11 +526,7 @@ void iommufd_device_detach(struct iommufd_device *idev)
        struct iommufd_hw_pagetable *hwpt;
 
        hwpt = iommufd_hw_pagetable_detach(idev);
-       if (hwpt->auto_domain)
-               iommufd_object_destroy_user(idev->ictx, &hwpt->obj);
-       else
-               refcount_dec(&hwpt->obj.users);
-
+       iommufd_hw_pagetable_put(idev->ictx, hwpt);
        refcount_dec(&idev->obj.users);
 }
 EXPORT_SYMBOL_NS_GPL(iommufd_device_detach, IOMMUFD);
index 6e11d6e..8bdbef8 100644 (file)
@@ -260,6 +260,16 @@ struct iommufd_hw_pagetable *
 iommufd_hw_pagetable_detach(struct iommufd_device *idev);
 void iommufd_hw_pagetable_destroy(struct iommufd_object *obj);
 
+static inline void iommufd_hw_pagetable_put(struct iommufd_ctx *ictx,
+                                           struct iommufd_hw_pagetable *hwpt)
+{
+       lockdep_assert_not_held(&hwpt->ioas->mutex);
+       if (hwpt->auto_domain)
+               iommufd_object_destroy_user(ictx, &hwpt->obj);
+       else
+               refcount_dec(&hwpt->obj.users);
+}
+
 struct iommufd_group {
        struct kref ref;
        struct mutex lock;