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 6/6] drm/msm: dump submits which triggered gpu hang
Date: Tue, 24 Oct 2017 09:22:53 -0400 [thread overview]
Message-ID: <20171024132256.20286-7-robdclark@gmail.com> (raw)
In-Reply-To: <20171024132256.20286-1-robdclark-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Note we need to move update_fences() to after msm_rd_dump_submit(),
otherwise the bo's referenced by the submit may no longer be valid.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/gpu/drm/msm/msm_gpu.c | 52 +++++++++++++++++++++++++------------------
1 file changed, 30 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 403baea19329..939ea98908b8 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -255,34 +255,16 @@ static void recover_worker(struct work_struct *work)
{
struct msm_gpu *gpu = container_of(work, struct msm_gpu, recover_work);
struct drm_device *dev = gpu->dev;
+ struct msm_drm_private *priv = dev->dev_private;
struct msm_gem_submit *submit;
struct msm_ringbuffer *cur_ring = gpu->funcs->active_ring(gpu);
- uint64_t fence;
int i;
- /* Update all the rings with the latest and greatest fence */
- for (i = 0; i < ARRAY_SIZE(gpu->rb); i++) {
- struct msm_ringbuffer *ring = gpu->rb[i];
-
- fence = ring->memptrs->fence;
-
- /*
- * For the current (faulting?) ring/submit advance the fence by
- * one more to clear the faulting submit
- */
- if (ring == cur_ring)
- fence = fence + 1;
-
- update_fences(gpu, ring, fence);
- }
-
mutex_lock(&dev->struct_mutex);
-
dev_err(dev->dev, "%s: hangcheck recover!\n", gpu->name);
- fence = cur_ring->memptrs->fence + 1;
- submit = find_submit(cur_ring, fence);
+ submit = find_submit(cur_ring, cur_ring->memptrs->fence + 1);
if (submit) {
struct task_struct *task;
@@ -306,11 +288,37 @@ static void recover_worker(struct work_struct *work)
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);
+ dev_err(dev->dev, "%s: offending task: %s (%.*s)\n",
+ gpu->name, task->comm, len, buf);
+
+ msm_rd_dump_submit(priv->hangrd, submit,
+ "offending task: %s (%.*s)", task->comm,
+ len, buf);
+ } else {
+ msm_rd_dump_submit(priv->hangrd, submit, NULL);
}
rcu_read_unlock();
+ }
+
+
+ /*
+ * Update all the rings with the latest and greatest fence.. this
+ * needs to happen after msm_rd_dump_submit() to ensure that the
+ * bo's referenced by the offending submit are still around.
+ */
+ for (i = 0; i < ARRAY_SIZE(gpu->rb); i++) {
+ struct msm_ringbuffer *ring = gpu->rb[i];
+
+ uint32_t fence = ring->memptrs->fence;
+ /*
+ * For the current (faulting?) ring/submit advance the fence by
+ * one more to clear the faulting submit
+ */
+ if (ring == cur_ring)
+ fence++;
+
+ update_fences(gpu, ring, fence);
}
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 6/6] drm/msm: dump submits which triggered gpu hang
Date: Tue, 24 Oct 2017 09:22:53 -0400 [thread overview]
Message-ID: <20171024132256.20286-7-robdclark@gmail.com> (raw)
In-Reply-To: <20171024132256.20286-1-robdclark@gmail.com>
Note we need to move update_fences() to after msm_rd_dump_submit(),
otherwise the bo's referenced by the submit may no longer be valid.
Signed-off-by: Rob Clark <robdclark@gmail.com>
---
drivers/gpu/drm/msm/msm_gpu.c | 52 +++++++++++++++++++++++++------------------
1 file changed, 30 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c
index 403baea19329..939ea98908b8 100644
--- a/drivers/gpu/drm/msm/msm_gpu.c
+++ b/drivers/gpu/drm/msm/msm_gpu.c
@@ -255,34 +255,16 @@ static void recover_worker(struct work_struct *work)
{
struct msm_gpu *gpu = container_of(work, struct msm_gpu, recover_work);
struct drm_device *dev = gpu->dev;
+ struct msm_drm_private *priv = dev->dev_private;
struct msm_gem_submit *submit;
struct msm_ringbuffer *cur_ring = gpu->funcs->active_ring(gpu);
- uint64_t fence;
int i;
- /* Update all the rings with the latest and greatest fence */
- for (i = 0; i < ARRAY_SIZE(gpu->rb); i++) {
- struct msm_ringbuffer *ring = gpu->rb[i];
-
- fence = ring->memptrs->fence;
-
- /*
- * For the current (faulting?) ring/submit advance the fence by
- * one more to clear the faulting submit
- */
- if (ring == cur_ring)
- fence = fence + 1;
-
- update_fences(gpu, ring, fence);
- }
-
mutex_lock(&dev->struct_mutex);
-
dev_err(dev->dev, "%s: hangcheck recover!\n", gpu->name);
- fence = cur_ring->memptrs->fence + 1;
- submit = find_submit(cur_ring, fence);
+ submit = find_submit(cur_ring, cur_ring->memptrs->fence + 1);
if (submit) {
struct task_struct *task;
@@ -306,11 +288,37 @@ static void recover_worker(struct work_struct *work)
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);
+ dev_err(dev->dev, "%s: offending task: %s (%.*s)\n",
+ gpu->name, task->comm, len, buf);
+
+ msm_rd_dump_submit(priv->hangrd, submit,
+ "offending task: %s (%.*s)", task->comm,
+ len, buf);
+ } else {
+ msm_rd_dump_submit(priv->hangrd, submit, NULL);
}
rcu_read_unlock();
+ }
+
+
+ /*
+ * Update all the rings with the latest and greatest fence.. this
+ * needs to happen after msm_rd_dump_submit() to ensure that the
+ * bo's referenced by the offending submit are still around.
+ */
+ for (i = 0; i < ARRAY_SIZE(gpu->rb); i++) {
+ struct msm_ringbuffer *ring = gpu->rb[i];
+
+ uint32_t fence = ring->memptrs->fence;
+ /*
+ * For the current (faulting?) ring/submit advance the fence by
+ * one more to clear the faulting submit
+ */
+ if (ring == cur_ring)
+ fence++;
+
+ update_fences(gpu, ring, fence);
}
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 ` [PATCH 1/6] drm/msm: show task cmdline in gpu recovery messages Rob Clark
2017-10-24 13:22 ` 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 ` Rob Clark [this message]
2017-10-24 13:22 ` [PATCH 6/6] drm/msm: dump submits which triggered gpu hang 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-7-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.