RE: [PATCH v10 08/12] iommu/sva: Refactoring iommu_sva_bind/unbind_device()

From: Tian, Kevin
Date: Mon Jul 25 2022 - 04:02:37 EST


> From: Jean-Philippe Brucker <jean-philippe@xxxxxxxxxx>
> Sent: Monday, July 25, 2022 3:39 PM
>
> On Sun, Jul 24, 2022 at 09:48:15PM +0800, Baolu Lu wrote:
> > /*
> > * iommu_detach_device_pasid() - Detach the domain from pasid of device
> > * @domain: the iommu domain.
> > * @dev: the attached device.
> > * @pasid: the pasid of the device.
> > *
> > * The @domain must have been attached to @pasid of the @dev with
> > * iommu_detach_device_pasid().
> > */
> > void iommu_detach_device_pasid(struct iommu_domain *domain, struct
> device
> > *dev,
> > ioasid_t pasid)
> > {
> > struct iommu_group *group = iommu_group_get(dev);
> > struct group_pasid *param;
> >
> > mutex_lock(&group->mutex);
> > domain->ops->set_dev_pasid(group->blocking_domain, dev, pasid);
>
> Please also pass the old domain to this detach() function, so that the
> IOMMU driver doesn't have to keep track of them internally.

The old domain is already tracked in group->pasid_xarray and can
be retrieved using [dev, pasid].

>
> In addition to clearing contexts, detach() also needs to invalidate TLBs,
> and for that the SMMU driver needs to know the old ASID (!= PASID) that
> was used by the context descriptor.
>

Presumably both ASID and context descriptor are SMMU internal
knowledge. What exact information is required from the core API
and how is it done today?