]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/msm/a5xx: disable preemption in submits by default
authorVladimir Lypak <vladimir.lypak@gmail.com>
Sun, 1 Sep 2024 13:54:00 +0000 (13:54 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:37:48 +0000 (16:37 +0200)
[ Upstream commit db9dec2db76146d65e1cfbb6afb2e2bd5dab67f8 ]

Fine grain preemption (switching from/to points within submits)
requires extra handling in command stream of those submits, especially
when rendering with tiling (using GMEM). However this handling is
missing at this point in mesa (and always was). For this reason we get
random GPU faults and hangs if more than one priority level is used
because local preemption is enabled prior to executing command stream
from submit.
With that said it was ahead of time to enable local preemption by
default considering the fact that even on downstream kernel it is only
enabled if requested via UAPI.

Fixes: a7a4c19c36de ("drm/msm/a5xx: fix setting of the CP_PREEMPT_ENABLE_LOCAL register")
Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com>
Patchwork: https://patchwork.freedesktop.org/patch/612041/
Signed-off-by: Rob Clark <robdclark@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/msm/adreno/a5xx_gpu.c

index c0b5373e90d7139caa023aec6f272545456acb0a..6c80d3003966bb8ccd3910803210f18ba3e1e533 100644 (file)
@@ -150,9 +150,13 @@ static void a5xx_submit(struct msm_gpu *gpu, struct msm_gem_submit *submit)
        OUT_PKT7(ring, CP_SET_PROTECTED_MODE, 1);
        OUT_RING(ring, 1);
 
-       /* Enable local preemption for finegrain preemption */
+       /*
+        * Disable local preemption by default because it requires
+        * user-space to be aware of it and provide additional handling
+        * to restore rendering state or do various flushes on switch.
+        */
        OUT_PKT7(ring, CP_PREEMPT_ENABLE_LOCAL, 1);
-       OUT_RING(ring, 0x1);
+       OUT_RING(ring, 0x0);
 
        /* Allow CP_CONTEXT_SWITCH_YIELD packets in the IB2 */
        OUT_PKT7(ring, CP_YIELD_ENABLE, 1);