Lines Matching refs:ictx

32 struct iommufd_object *_iommufd_object_alloc(struct iommufd_ctx *ictx,  in _iommufd_object_alloc()  argument
54 rc = xa_alloc(&ictx->objects, &obj->id, XA_ZERO_ENTRY, in _iommufd_object_alloc()
73 void iommufd_object_finalize(struct iommufd_ctx *ictx, in iommufd_object_finalize() argument
78 old = xa_store(&ictx->objects, obj->id, obj, GFP_KERNEL); in iommufd_object_finalize()
84 void iommufd_object_abort(struct iommufd_ctx *ictx, struct iommufd_object *obj) in iommufd_object_abort() argument
88 old = xa_erase(&ictx->objects, obj->id); in iommufd_object_abort()
97 void iommufd_object_abort_and_destroy(struct iommufd_ctx *ictx, in iommufd_object_abort_and_destroy() argument
104 iommufd_object_abort(ictx, obj); in iommufd_object_abort_and_destroy()
107 struct iommufd_object *iommufd_get_object(struct iommufd_ctx *ictx, u32 id, in iommufd_get_object() argument
115 xa_lock(&ictx->objects); in iommufd_get_object()
116 obj = xa_load(&ictx->objects, id); in iommufd_get_object()
120 xa_unlock(&ictx->objects); in iommufd_get_object()
124 static int iommufd_object_dec_wait_shortterm(struct iommufd_ctx *ictx, in iommufd_object_dec_wait_shortterm() argument
130 if (wait_event_timeout(ictx->destroy_wait, in iommufd_object_dec_wait_shortterm()
145 int iommufd_object_remove(struct iommufd_ctx *ictx, in iommufd_object_remove() argument
150 XA_STATE(xas, &ictx->objects, id); in iommufd_object_remove()
161 ret = iommufd_object_dec_wait_shortterm(ictx, to_destroy); in iommufd_object_remove()
173 xa_lock(&ictx->objects); in iommufd_object_remove()
197 if (ictx->vfio_ioas == container_of(obj, struct iommufd_ioas, obj)) in iommufd_object_remove()
198 ictx->vfio_ioas = NULL; in iommufd_object_remove()
199 xa_unlock(&ictx->objects); in iommufd_object_remove()
206 ret = iommufd_object_dec_wait_shortterm(ictx, obj); in iommufd_object_remove()
220 xa_unlock(&ictx->objects); in iommufd_object_remove()
230 return iommufd_object_remove(ucmd->ictx, NULL, cmd->id, 0); in iommufd_destroy()
235 struct iommufd_ctx *ictx; in iommufd_fops_open() local
237 ictx = kzalloc(sizeof(*ictx), GFP_KERNEL_ACCOUNT); in iommufd_fops_open()
238 if (!ictx) in iommufd_fops_open()
247 ictx->account_mode = IOPT_PAGES_ACCOUNT_MM; in iommufd_fops_open()
251 xa_init_flags(&ictx->objects, XA_FLAGS_ALLOC1 | XA_FLAGS_ACCOUNT); in iommufd_fops_open()
252 xa_init(&ictx->groups); in iommufd_fops_open()
253 ictx->file = filp; in iommufd_fops_open()
254 init_waitqueue_head(&ictx->destroy_wait); in iommufd_fops_open()
255 filp->private_data = ictx; in iommufd_fops_open()
261 struct iommufd_ctx *ictx = filp->private_data; in iommufd_fops_release() local
273 while (!xa_empty(&ictx->objects)) { in iommufd_fops_release()
277 xa_for_each(&ictx->objects, index, obj) { in iommufd_fops_release()
281 xa_erase(&ictx->objects, index); in iommufd_fops_release()
289 WARN_ON(!xa_empty(&ictx->groups)); in iommufd_fops_release()
290 kfree(ictx); in iommufd_fops_release()
304 rc = iommufd_option_rlimit_mode(cmd, ucmd->ictx); in iommufd_option()
395 struct iommufd_ctx *ictx = filp->private_data; in iommufd_fops_ioctl() local
405 return iommufd_vfio_ioctl(ictx, cmd, arg); in iommufd_fops_ioctl()
407 ucmd.ictx = ictx; in iommufd_fops_ioctl()
441 void iommufd_ctx_get(struct iommufd_ctx *ictx) in iommufd_ctx_get() argument
443 get_file(ictx->file); in iommufd_ctx_get()
457 struct iommufd_ctx *ictx; in iommufd_ctx_from_file() local
461 ictx = file->private_data; in iommufd_ctx_from_file()
462 iommufd_ctx_get(ictx); in iommufd_ctx_from_file()
463 return ictx; in iommufd_ctx_from_file()
495 void iommufd_ctx_put(struct iommufd_ctx *ictx) in iommufd_ctx_put() argument
497 fput(ictx->file); in iommufd_ctx_put()