]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
drm/msm/adreno: fix updating ring fence
authorRob Clark <robdclark@chromium.org>
Thu, 13 Aug 2020 00:03:09 +0000 (17:03 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 3 Sep 2020 09:26:54 +0000 (11:26 +0200)
[ Upstream commit f228af11dfa1d1616bc67f3a4119ab77c36181f1 ]

We need to set it to the most recent completed fence, not the most
recent submitted.  Otherwise we have races where we think we can retire
submits that the GPU is not finished with, if the GPU doesn't manage to
overwrite the seqno before we look at it.

This can show up with hang recovery if one of the submits after the
crashing submit also hangs after it is replayed.

Fixes: f97decac5f4c ("drm/msm: Support multiple ringbuffers")
Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org>
Signed-off-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/msm/adreno/adreno_gpu.c

index 048c8be426f3254c37294cca600a0714d1fd84cf..053da39da1cc03cb009f315bc527912e1db1f0b9 100644 (file)
@@ -350,7 +350,7 @@ int adreno_hw_init(struct msm_gpu *gpu)
                ring->next = ring->start;
 
                /* reset completed fence seqno: */
-               ring->memptrs->fence = ring->seqno;
+               ring->memptrs->fence = ring->fctx->completed_fence;
                ring->memptrs->rptr = 0;
        }