|
@@ -95,7 +95,6 @@ static int __afu_open(struct inode *inode, struct file *file, bool master)
|
|
|
|
|
|
pr_devel("afu_open pe: %i\n", ctx->pe);
|
|
|
file->private_data = ctx;
|
|
|
- cxl_ctx_get();
|
|
|
|
|
|
/* indicate success */
|
|
|
rc = 0;
|
|
@@ -225,6 +224,12 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
|
|
|
if (ctx->mm)
|
|
|
mmput(ctx->mm);
|
|
|
|
|
|
+ /*
|
|
|
+ * Increment driver use count. Enables global TLBIs for hash
|
|
|
+ * and callbacks to handle the segment table
|
|
|
+ */
|
|
|
+ cxl_ctx_get();
|
|
|
+
|
|
|
trace_cxl_attach(ctx, work.work_element_descriptor, work.num_interrupts, amr);
|
|
|
|
|
|
if ((rc = cxl_ops->attach_process(ctx, false, work.work_element_descriptor,
|
|
@@ -233,6 +238,7 @@ static long afu_ioctl_start_work(struct cxl_context *ctx,
|
|
|
cxl_adapter_context_put(ctx->afu->adapter);
|
|
|
put_pid(ctx->pid);
|
|
|
ctx->pid = NULL;
|
|
|
+ cxl_ctx_put();
|
|
|
cxl_context_mm_count_put(ctx);
|
|
|
goto out;
|
|
|
}
|