Commit 65a3c274 authored by Jordan Crouse's avatar Jordan Crouse Committed by Rob Clark

drm/msm/gpu: Rearrange the code that collects the task during a hang

Do a bit of cleanup to prepare for upcoming changes to pass the
hanging task comm and cmdline to the crash dump function.

v2: Use GFP_ATOMIC while holding the rcu lock per Chris Wilson
Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 4f776f45
...@@ -314,6 +314,7 @@ static void recover_worker(struct work_struct *work) ...@@ -314,6 +314,7 @@ static void recover_worker(struct work_struct *work)
struct msm_drm_private *priv = dev->dev_private; struct msm_drm_private *priv = dev->dev_private;
struct msm_gem_submit *submit; struct msm_gem_submit *submit;
struct msm_ringbuffer *cur_ring = gpu->funcs->active_ring(gpu); struct msm_ringbuffer *cur_ring = gpu->funcs->active_ring(gpu);
char *comm = NULL, *cmd = NULL;
int i; int i;
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
...@@ -327,7 +328,7 @@ static void recover_worker(struct work_struct *work) ...@@ -327,7 +328,7 @@ static void recover_worker(struct work_struct *work)
rcu_read_lock(); rcu_read_lock();
task = pid_task(submit->pid, PIDTYPE_PID); task = pid_task(submit->pid, PIDTYPE_PID);
if (task) { if (task) {
char *cmd; comm = kstrdup(task->comm, GFP_ATOMIC);
/* /*
* So slightly annoying, in other paths like * So slightly annoying, in other paths like
...@@ -340,22 +341,23 @@ static void recover_worker(struct work_struct *work) ...@@ -340,22 +341,23 @@ static void recover_worker(struct work_struct *work)
* about the submit going away. * about the submit going away.
*/ */
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
cmd = kstrdup_quotable_cmdline(task, GFP_KERNEL); cmd = kstrdup_quotable_cmdline(task, GFP_ATOMIC);
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
}
rcu_read_unlock();
if (comm && cmd) {
dev_err(dev->dev, "%s: offending task: %s (%s)\n", dev_err(dev->dev, "%s: offending task: %s (%s)\n",
gpu->name, task->comm, cmd); gpu->name, comm, cmd);
msm_rd_dump_submit(priv->hangrd, submit, msm_rd_dump_submit(priv->hangrd, submit,
"offending task: %s (%s)", task->comm, cmd); "offending task: %s (%s)", comm, cmd);
} else
kfree(cmd);
} else {
msm_rd_dump_submit(priv->hangrd, submit, NULL); msm_rd_dump_submit(priv->hangrd, submit, NULL);
}
rcu_read_unlock();
} }
kfree(cmd);
kfree(comm);
/* /*
* Update all the rings with the latest and greatest fence.. this * Update all the rings with the latest and greatest fence.. this
......
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