Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -314,6 +314,7 @@ static void recover_worker(struct work_struct *work)
	struct msm_drm_private *priv = dev->dev_private;
	struct msm_gem_submit *submit;
	struct msm_ringbuffer *cur_ring = gpu->funcs->active_ring(gpu);
	char *comm = NULL, *cmd = NULL;
	int i;

	mutex_lock(&dev->struct_mutex);
@@ -327,7 +328,7 @@ static void recover_worker(struct work_struct *work)
		rcu_read_lock();
		task = pid_task(submit->pid, PIDTYPE_PID);
		if (task) {
			char *cmd;
			comm = kstrdup(task->comm, GFP_ATOMIC);

			/*
			 * So slightly annoying, in other paths like
@@ -340,22 +341,23 @@ static void recover_worker(struct work_struct *work)
			 * about the submit going away.
			 */
			mutex_unlock(&dev->struct_mutex);
			cmd = kstrdup_quotable_cmdline(task, GFP_KERNEL);
			cmd = kstrdup_quotable_cmdline(task, GFP_ATOMIC);
			mutex_lock(&dev->struct_mutex);
		}
		rcu_read_unlock();

		if (comm && cmd) {
			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,
				"offending task: %s (%s)", task->comm, cmd);

			kfree(cmd);
		} else {
				"offending task: %s (%s)", comm, cmd);
		} else
			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