void hl_ctx_do_release(struct kref *ref) { struct hl_ctx *ctx; ctx = container_of(ref, struct hl_ctx, refcount); hl_ctx_fini(ctx); if (ctx->hpriv) hl_hpriv_put(ctx->hpriv); kfree(ctx); }
/* * hl_device_release - release function for habanalabs device * * @inode: pointer to inode structure * @filp: pointer to file structure * * Called when process closes an habanalabs device */ static int hl_device_release(struct inode *inode, struct file *filp) { struct hl_fpriv *hpriv = filp->private_data; hl_cb_mgr_fini(hpriv->hdev, &hpriv->cb_mgr); hl_ctx_mgr_fini(hpriv->hdev, &hpriv->ctx_mgr); filp->private_data = NULL; hl_hpriv_put(hpriv); return 0; }