Re: [PATCH 1/1] iommu: Bind process address spaces to devices

From: Joerg Roedel
Date: Tue Feb 26 2019 - 06:17:48 EST


Hi Jean-Philippe,

Thanks for the patch! I think this is getting close to be applied after
the next merge window.

On Wed, Feb 20, 2019 at 02:27:59PM +0000, Jean-Philippe Brucker wrote:
> +int iommu_sva_bind_device(struct device *dev, struct mm_struct *mm, int *pasid,
> + iommu_mm_exit_handler_t mm_exit, void *drvdata)

I think we are better of with introducing a sva-bind handle which can be
used to extend and further configure the binding done with this
function.

How about a 'struct iommu_sva' with an iommu-private definition that is
returned by this function:

struct iommu_sva *iommu_sva_bind_device(struct device *dev,
struct mm_struct *mm);

and the corresponding unbind function:

int iommu_sva_unbind_device(struct iommu_sva* *handle);

(Btw, does this need to return and int? Can unbinding fail?).

With that in place we can implement and extentable API base on the
handle:

int iommu_sva_get_pasid(struct iommu_sva *handle);
void iommu_sva_set_exit_handler(struct iommu_sva *handle,
iommu_mm_exit_handler_t mm_exit);

I think at least the AMD IOMMU driver needs more call-backs like a
handler that is invoked when a fault can not be resolved. And there
might be others in the future, putting them all in the parameter list of
the bind function doesn't scale well.

Regards,

Joerg