On Mon, Jul 10, 2023 at 07:59:16PM -0700, Yi Liu wrote: > From: Nicolin Chen <nicol...@nvidia.com> > > Previously, the detach routine is only done by the destroy(). And it was > called by vfio_iommufd_emulated_unbind() when the device runs close(), so > all the mappings in iopt were cleaned in that setup, when the call trace > reaches this detach() routine. > > Now, there's a need of a detach uAPI, meaning that it does not only need > a new iommufd_access_detach() API, but also requires access->ops->unmap() > call as a cleanup. So add one. > > However, leaving that unprotected can introduce some potential of a race > condition during the pin_/unpin_pages() call, where access->ioas->iopt is > getting referenced. So, add an ioas_lock to protect the context of iopt > referencings. > > Also, to allow the iommufd_access_unpin_pages() callback to happen via > this unmap() call, add an ioas_unpin pointer, so the unpin routine won't > be affected by the "access->ioas = NULL" trick. > > Reviewed-by: Kevin Tian <kevin.t...@intel.com> > Tested-by: Terrence Xu <terrence...@intel.com> > Tested-by: Nicolin Chen <nicol...@nvidia.com> > Tested-by: Matthew Rosato <mjros...@linux.ibm.com> > Tested-by: Yanting Jiang <yanting.ji...@intel.com> > Tested-by: Shameer Kolothum <shameerali.kolothum.th...@huawei.com> > Signed-off-by: Nicolin Chen <nicol...@nvidia.com> > Signed-off-by: Yi Liu <yi.l....@intel.com> > --- > drivers/iommu/iommufd/device.c | 74 +++++++++++++++++++++++-- > drivers/iommu/iommufd/iommufd_private.h | 2 + > include/linux/iommufd.h | 1 + > 3 files changed, 72 insertions(+), 5 deletions(-)
Reviewed-by: Jason Gunthorpe <j...@nvidia.com> Jason