> From: Yi Liu <yi.l....@intel.com>
> Sent: Thursday, September 12, 2024 9:13 PM
> 
> iommufd plans to always pass in an iommu_attach_handle to the iommu
> core, so it's no longer fault specific, hence move the helpers out
> of the fault.c

again please put the reason for why iommufd plans to do so.

> --- a/drivers/iommu/iommufd/iommufd_private.h
> +++ b/drivers/iommu/iommufd/iommufd_private.h
> @@ -458,6 +458,63 @@ struct iommufd_attach_handle {
>  /* Convert an iommu attach handle to iommufd handle. */
>  #define to_iommufd_handle(hdl)       container_of(hdl, struct
> iommufd_attach_handle, handle)
> 
> +static inline struct iommufd_attach_handle *
> +iommufd_device_get_attach_handle(struct iommufd_device *idev)
> +{
> +     struct iommu_attach_handle *handle;
> +
> +     handle = iommu_attach_handle_get(idev->igroup->group,
> IOMMU_NO_PASID, 0);
> +     if (IS_ERR(handle))
> +             return NULL;
> +
> +     return to_iommufd_handle(handle);
> +}
> +
> +static inline int iommufd_dev_attach_handle(struct
> iommufd_hw_pagetable *hwpt,
> +                                         struct iommufd_device *idev)
> +{
> +     struct iommufd_attach_handle *handle;
> +     int ret;
> +
> +     handle = kzalloc(sizeof(*handle), GFP_KERNEL);
> +     if (!handle)
> +             return -ENOMEM;
> +
> +     handle->idev = idev;
> +     ret = iommu_attach_group_handle(hwpt->domain, idev->igroup-
> >group,
> +                                     &handle->handle);
> +     if (ret)
> +             kfree(handle);
> +
> +     return ret;
> +}
> +
> +/* Caller to free the old iommufd_attach_handle */
> +static inline struct iommufd_attach_handle *
> +iommufd_dev_replace_handle(struct iommufd_device *idev,
> +                        struct iommufd_hw_pagetable *hwpt,
> +                        struct iommufd_hw_pagetable *old)
> +{
> +     struct iommufd_attach_handle *handle, *curr;
> +     int ret;
> +
> +     curr = iommufd_device_get_attach_handle(idev);
> +
> +     handle = kzalloc(sizeof(*handle), GFP_KERNEL);
> +     if (!handle)
> +             return ERR_PTR(-ENOMEM);
> +
> +     handle->idev = idev;
> +     ret = iommu_replace_group_handle(idev->igroup->group,
> +                                      hwpt->domain, &handle->handle);
> +     if (ret) {
> +             kfree(handle);
> +             return ERR_PTR(ret);
> +     }
> +
> +     return curr;
> +}
> +

why putting them in header file instead of C file?

Reply via email to