|
@@ -183,6 +183,7 @@ int cxl_start_context(struct cxl_context *ctx, u64 wed,
|
|
|
ctx->pid = get_task_pid(task, PIDTYPE_PID);
|
|
|
ctx->glpid = get_task_pid(task->group_leader, PIDTYPE_PID);
|
|
|
kernel = false;
|
|
|
+ ctx->real_mode = false;
|
|
|
}
|
|
|
|
|
|
cxl_ctx_get();
|
|
@@ -219,6 +220,24 @@ void cxl_set_master(struct cxl_context *ctx)
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(cxl_set_master);
|
|
|
|
|
|
+int cxl_set_translation_mode(struct cxl_context *ctx, bool real_mode)
|
|
|
+{
|
|
|
+ if (ctx->status == STARTED) {
|
|
|
+ /*
|
|
|
+ * We could potentially update the PE and issue an update LLCMD
|
|
|
+ * to support this, but it doesn't seem to have a good use case
|
|
|
+ * since it's trivial to just create a second kernel context
|
|
|
+ * with different translation modes, so until someone convinces
|
|
|
+ * me otherwise:
|
|
|
+ */
|
|
|
+ return -EBUSY;
|
|
|
+ }
|
|
|
+
|
|
|
+ ctx->real_mode = real_mode;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(cxl_set_translation_mode);
|
|
|
+
|
|
|
/* wrappers around afu_* file ops which are EXPORTED */
|
|
|
int cxl_fd_open(struct inode *inode, struct file *file)
|
|
|
{
|