OSDN Git Service

msm: kgsl: Get GPU snapshot if wait for global timestamp timeout
authorHareesh Gundu <hareeshg@codeaurora.org>
Thu, 18 Aug 2016 12:23:30 +0000 (17:53 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Fri, 7 Oct 2016 06:18:46 +0000 (23:18 -0700)
If the wait for global fails due to timeout then nothing after this
point is likely to work very well. Get GPU snapshot in addition to
BUG_ON(), to analyze the GPU fault.

CRs-Fixed: 1053780
Change-Id: I29930120a72a08533c859002f646af93e67c754f
Signed-off-by: Hareesh Gundu <hareeshg@codeaurora.org>
drivers/gpu/msm/adreno_drawctxt.c

index fb95f61..d9ebe37 100644 (file)
@@ -499,13 +499,20 @@ void adreno_drawctxt_detach(struct kgsl_context *context)
 
        /*
         * If the wait for global fails due to timeout then nothing after this
-        * point is likely to work very well - BUG_ON() so we can take advantage
-        * of the debug tools to figure out what the h - e - double hockey
-        * sticks happened. If EAGAIN error is returned then recovery will kick
-        * in and there will be no more commands in the RB pipe from this
-        * context which is waht we are waiting for, so ignore -EAGAIN error
+        * point is likely to work very well - Get GPU snapshot and BUG_ON()
+        * so we can take advantage of the debug tools to figure out what the
+        * h - e - double hockey sticks happened. If EAGAIN error is returned
+        * then recovery will kick in and there will be no more commands in the
+        * RB pipe from this context which is waht we are waiting for, so ignore
+        * -EAGAIN error
         */
-       BUG_ON(ret && ret != -EAGAIN);
+       if (ret && ret != -EAGAIN) {
+               KGSL_DRV_ERR(device, "Wait for global ts=%d type=%d error=%d\n",
+                               drawctxt->internal_timestamp,
+                               drawctxt->type, ret);
+               device->force_panic = 1;
+               kgsl_device_snapshot(device, context);
+       }
 
        kgsl_sharedmem_writel(device, &device->memstore,
                        KGSL_MEMSTORE_OFFSET(context->id, soptimestamp),