diff options
| author | Rob Clark <[email protected]> | 2022-06-15 09:24:35 -0700 |
|---|---|---|
| committer | Dmitry Baryshkov <[email protected]> | 2022-07-05 06:01:11 +0300 |
| commit | 2311720a0182756f175fbf4afc1fb76ac487b587 (patch) | |
| tree | 1e0e1b367649c75cf59f73a71efb8136e64535bf | |
| parent | 4400c3a1d48f7f7863ca65d24f99ad295b37726c (diff) | |
drm/msm: Fix fence rollover issue
And while we are at it, let's start the fence counter close to the
rollover point so that if issues slip in, they are more obvious.
Signed-off-by: Rob Clark <[email protected]>
Fixes: fde5de6cb461 ("drm/msm: move fence code to it's own file")
Fixes: 5f3aee4ceb5b ("drm/msm: Handle fence rollover")
Patchwork: https://patchwork.freedesktop.org/patch/489619/
Link: https://lore.kernel.org/r/[email protected]
[DB: fixed the conflict while applying the patch]
Signed-off-by: Dmitry Baryshkov <[email protected]>
| -rw-r--r-- | drivers/gpu/drm/msm/msm_fence.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/msm_fence.c b/drivers/gpu/drm/msm/msm_fence.c index 38e3323bc232..a47e5837c528 100644 --- a/drivers/gpu/drm/msm/msm_fence.c +++ b/drivers/gpu/drm/msm/msm_fence.c @@ -28,6 +28,14 @@ msm_fence_context_alloc(struct drm_device *dev, volatile uint32_t *fenceptr, fctx->fenceptr = fenceptr; spin_lock_init(&fctx->spinlock); + /* + * Start out close to the 32b fence rollover point, so we can + * catch bugs with fence comparisons. + */ + fctx->last_fence = 0xffffff00; + fctx->completed_fence = fctx->last_fence; + *fctx->fenceptr = fctx->last_fence; + return fctx; } @@ -52,7 +60,8 @@ void msm_update_fence(struct msm_fence_context *fctx, uint32_t fence) unsigned long flags; spin_lock_irqsave(&fctx->spinlock, flags); - fctx->completed_fence = max(fence, fctx->completed_fence); + if (fence_after(fence, fctx->completed_fence)) + fctx->completed_fence = fence; spin_unlock_irqrestore(&fctx->spinlock, flags); } |