On Mon, Nov 14, 2022 at 08:25:35AM +0000, Tian, Kevin wrote:
From: Jason Gunthorpe jgg@nvidia.com Sent: Tuesday, November 8, 2022 8:49 AM
Callers must provide a callback that immediately unpins any IOVA being used within a range. This happens if userspace unmaps the IOVA under the pin.
with 'must' then let's add a check in iommufd_access_create() on the unmap callback.
What I did is put it on the iommufd_access_pin_pages() call, since it is fine to use rw without providing an callback
+struct iommufd_access * +iommufd_access_create(struct iommufd_ctx *ictx, u32 ioas_id,
const struct iommufd_access_ops *ops, void *data)
+{
- struct iommufd_access *access;
- struct iommufd_object *obj;
- int rc;
- /*
* There is no uAPI for the access object, but to keep things
symmetric
* use the object infrastructure anyhow.
*/
- access = iommufd_object_alloc(ictx, access, IOMMUFD_OBJ_ACCESS);
- if (IS_ERR(access))
return access;
- access->data = data;
- access->ops = ops;
- access->ictx = ictx;
I didn't see other places referencing access->ictx before this func succeeds. But just to be robust it's always cleaner to put this line together with iommufd_ctx_get().
OK
Thanks, Jason