From: Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Cc: David Airlie <airlied-cv59FeDIM0c@public.gmane.org>,
linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Rob Clark <robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Jordan Crouse <jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: [PATCH 1/6] drm/msm: show task cmdline in gpu recovery messages
Date: Tue, 24 Oct 2017 09:22:48 -0400 [thread overview]
Message-ID: <20171024132256.20286-2-robdclark@gmail.com> (raw)
In-Reply-To: <20171024132256.20286-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Now that freedreno gallium driver defaults to using submit_queue task
(render reordering), just showing task->comm is not so useful (ie. it is
always "flush_queue:0"), so also dump the cmdline. This should also be
more useful for piglit/shader_runner.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/gpu/drm/msm/msm_gpu.c | 54 +++++++++++++++++++++++++++++++++----------
1 file changed, 42 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index a05aa119f22b..d26a7282466e 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -235,6 +235,20 @@ static void update_fences(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
}
}
+static struct msm_gem_submit *
+find_submit(struct msm_ringbuffer *ring, uint32_t fence)
+{
+ struct msm_gem_submit *submit;
+
+ WARN_ON(!mutex_is_locked(&ring->gpu->dev->struct_mutex));
+
+ list_for_each_entry(submit, &ring->submits, node)
+ if (submit->seqno == fence)
+ return submit;
+
+ return NULL;
+}
+
static void retire_submits(struct msm_gpu *gpu);
static void recover_worker(struct work_struct *work)
@@ -268,19 +282,35 @@ static void recover_worker(struct work_struct *work)
dev_err(dev->dev, "%s: hangcheck recover!\n", gpu->name);
fence = cur_ring->memptrs->fence + 1;
- list_for_each_entry(submit, &cur_ring->submits, node) {
- if (submit->seqno == fence) {
- struct task_struct *task;
-
- rcu_read_lock();
- task = pid_task(submit->pid, PIDTYPE_PID);
- if (task) {
- dev_err(dev->dev, "%s: offending task: %s\n",
- gpu->name, task->comm);
- }
- rcu_read_unlock();
- break;
+ submit = find_submit(cur_ring, fence);
+ if (submit) {
+ struct task_struct *task;
+
+ rcu_read_lock();
+ task = pid_task(submit->pid, PIDTYPE_PID);
+ if (task) {
+ char buf[256];
+ int len;
+
+ /*
+ * so slightly annoying, in other paths like mmap'ing gem
+ * buffers, mmap_sem is acquired before struct_mutex, which
+ * means we can't hold struct_mutex across the call to
+ * get_cmdline(). But we don't need 'submit' any further
+ * so no issue if hypothetically it goes away when dropping
+ * struct_mutex. For good measure null out the submit ptr
+ * to make this obvious.
+ */
+ submit = NULL;
+ mutex_unlock(&dev->struct_mutex);
+ len = get_cmdline(task, buf, sizeof(buf));
+ mutex_lock(&dev->struct_mutex);
+
+ dev_err(dev->dev, "%s: offending task: %s (%-*s)\n",
+ gpu->name, task->comm, len, buf);
}
+ rcu_read_unlock();
+
}
if (msm_gpu_active(gpu)) {
--
2.13.6
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
WARNING: multiple messages have this Message-ID (diff)
From: Rob Clark <robdclark@gmail.com>
To: dri-devel@lists.freedesktop.org
Cc: linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org,
Jordan Crouse <jcrouse@codeaurora.org>,
Rob Clark <robdclark@gmail.com>, David Airlie <airlied@linux.ie>,
linux-kernel@vger.kernel.org
Subject: [PATCH 1/6] drm/msm: show task cmdline in gpu recovery messages
Date: Tue, 24 Oct 2017 09:22:48 -0400 [thread overview]
Message-ID: <20171024132256.20286-2-robdclark@gmail.com> (raw)
In-Reply-To: <20171024132256.20286-1-robdclark@gmail.com>
Now that freedreno gallium driver defaults to using submit_queue task
(render reordering), just showing task->comm is not so useful (ie. it is
always "flush_queue:0"), so also dump the cmdline. This should also be
more useful for piglit/shader_runner.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/gpu/drm/msm/msm_gpu.c | 54 +++++++++++++++++++++++++++++++++----------
1 file changed, 42 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index a05aa119f22b..d26a7282466e 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -235,6 +235,20 @@ static void update_fences(struct msm_gpu *gpu, struct msm_ringbuffer *ring,
}
}
+static struct msm_gem_submit *
+find_submit(struct msm_ringbuffer *ring, uint32_t fence)
+{
+ struct msm_gem_submit *submit;
+
+ WARN_ON(!mutex_is_locked(&ring->gpu->dev->struct_mutex));
+
+ list_for_each_entry(submit, &ring->submits, node)
+ if (submit->seqno == fence)
+ return submit;
+
+ return NULL;
+}
+
static void retire_submits(struct msm_gpu *gpu);
static void recover_worker(struct work_struct *work)
@@ -268,19 +282,35 @@ static void recover_worker(struct work_struct *work)
dev_err(dev->dev, "%s: hangcheck recover!\n", gpu->name);
fence = cur_ring->memptrs->fence + 1;
- list_for_each_entry(submit, &cur_ring->submits, node) {
- if (submit->seqno == fence) {
- struct task_struct *task;
-
- rcu_read_lock();
- task = pid_task(submit->pid, PIDTYPE_PID);
- if (task) {
- dev_err(dev->dev, "%s: offending task: %s\n",
- gpu->name, task->comm);
- }
- rcu_read_unlock();
- break;
+ submit = find_submit(cur_ring, fence);
+ if (submit) {
+ struct task_struct *task;
+
+ rcu_read_lock();
+ task = pid_task(submit->pid, PIDTYPE_PID);
+ if (task) {
+ char buf[256];
+ int len;
+
+ /*
+ * so slightly annoying, in other paths like mmap'ing gem
+ * buffers, mmap_sem is acquired before struct_mutex, which
+ * means we can't hold struct_mutex across the call to
+ * get_cmdline(). But we don't need 'submit' any further
+ * so no issue if hypothetically it goes away when dropping
+ * struct_mutex. For good measure null out the submit ptr
+ * to make this obvious.
+ */
+ submit = NULL;
+ mutex_unlock(&dev->struct_mutex);
+ len = get_cmdline(task, buf, sizeof(buf));
+ mutex_lock(&dev->struct_mutex);
+
+ dev_err(dev->dev, "%s: offending task: %s (%-*s)\n",
+ gpu->name, task->comm, len, buf);
}
+ rcu_read_unlock();
+
}
if (msm_gpu_active(gpu)) {
--
2.13.6
next prev parent reply other threads:[~2017-10-24 13:22 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-24 13:22 [PATCH 0/6] drm/msm: GPU debugging enhancements Rob Clark
[not found] ` <20171024132256.20286-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-10-24 13:22 ` Rob Clark [this message]
2017-10-24 13:22 ` [PATCH 1/6] drm/msm: show task cmdline in gpu recovery messages Rob Clark
2017-10-24 13:22 ` [PATCH 2/6] drm/msm: add special _get_vaddr_active() for cmdstream dumps Rob Clark
2017-10-24 13:22 ` Rob Clark
2017-10-24 13:22 ` [PATCH 3/6] drm/msm: split rd debugfs file Rob Clark
2017-10-24 13:22 ` Rob Clark
2017-10-24 13:22 ` [PATCH 4/6] drm/msm/rd: allow adding addition msg to top of dump Rob Clark
2017-10-24 13:22 ` Rob Clark
2017-10-24 13:22 ` [PATCH 6/6] drm/msm: dump submits which triggered gpu hang Rob Clark
2017-10-24 13:22 ` Rob Clark
2017-10-24 13:22 ` [PATCH 5/6] drm/msm: preserve IOVAs in submit's bo table Rob Clark
2017-10-24 13:22 ` Rob Clark
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171024132256.20286-2-robdclark@gmail.com \
--to=robdclark-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
--cc=airlied-cv59FeDIM0c@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.