Commit a6b07d82 authored by Michael Neuling's avatar Michael Neuling Committed by Michael Ellerman

cxl: Only check pid for userspace contexts

We only need to check the pid attached to this context for userspace contexts.
Kernel contexts can skip this check.
Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
Acked-by: default avatarIan Munsie <imunsie@au1.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 1a1a94b8
...@@ -172,8 +172,8 @@ void cxl_handle_fault(struct work_struct *fault_work) ...@@ -172,8 +172,8 @@ void cxl_handle_fault(struct work_struct *fault_work)
container_of(fault_work, struct cxl_context, fault_work); container_of(fault_work, struct cxl_context, fault_work);
u64 dsisr = ctx->dsisr; u64 dsisr = ctx->dsisr;
u64 dar = ctx->dar; u64 dar = ctx->dar;
struct task_struct *task; struct task_struct *task = NULL;
struct mm_struct *mm; struct mm_struct *mm = NULL;
if (cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An) != dsisr || if (cxl_p2n_read(ctx->afu, CXL_PSL_DSISR_An) != dsisr ||
cxl_p2n_read(ctx->afu, CXL_PSL_DAR_An) != dar || cxl_p2n_read(ctx->afu, CXL_PSL_DAR_An) != dar ||
...@@ -194,17 +194,19 @@ void cxl_handle_fault(struct work_struct *fault_work) ...@@ -194,17 +194,19 @@ void cxl_handle_fault(struct work_struct *fault_work)
pr_devel("CXL BOTTOM HALF handling fault for afu pe: %i. " pr_devel("CXL BOTTOM HALF handling fault for afu pe: %i. "
"DSISR: %#llx DAR: %#llx\n", ctx->pe, dsisr, dar); "DSISR: %#llx DAR: %#llx\n", ctx->pe, dsisr, dar);
if (!(task = get_pid_task(ctx->pid, PIDTYPE_PID))) { if (!ctx->kernel) {
pr_devel("cxl_handle_fault unable to get task %i\n", if (!(task = get_pid_task(ctx->pid, PIDTYPE_PID))) {
pid_nr(ctx->pid)); pr_devel("cxl_handle_fault unable to get task %i\n",
cxl_ack_ae(ctx); pid_nr(ctx->pid));
return; cxl_ack_ae(ctx);
} return;
if (!(mm = get_task_mm(task))) { }
pr_devel("cxl_handle_fault unable to get mm %i\n", if (!(mm = get_task_mm(task))) {
pid_nr(ctx->pid)); pr_devel("cxl_handle_fault unable to get mm %i\n",
cxl_ack_ae(ctx); pid_nr(ctx->pid));
goto out; cxl_ack_ae(ctx);
goto out;
}
} }
if (dsisr & CXL_PSL_DSISR_An_DS) if (dsisr & CXL_PSL_DSISR_An_DS)
...@@ -214,9 +216,11 @@ void cxl_handle_fault(struct work_struct *fault_work) ...@@ -214,9 +216,11 @@ void cxl_handle_fault(struct work_struct *fault_work)
else else
WARN(1, "cxl_handle_fault has nothing to handle\n"); WARN(1, "cxl_handle_fault has nothing to handle\n");
mmput(mm); if (mm)
mmput(mm);
out: out:
put_task_struct(task); if (task)
put_task_struct(task);
} }
static void cxl_prefault_one(struct cxl_context *ctx, u64 ea) static void cxl_prefault_one(struct cxl_context *ctx, u64 ea)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment