summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2014-12-31 14:51:20 -0800
committerEric Anholt <eric@anholt.net>2015-06-04 14:15:29 -0700
commit885d01c7d368b2049b207b7ea1fba622172acfc9 (patch)
treed7aec5d3ef3afae50abc61e8addc7ec710269959
parent37737b6747d4804f88f6b787f2132efe62f5047b (diff)
downloadlinux-885d01c7d368b2049b207b7ea1fba622172acfc9.tar.gz
drm/vc4: Disallow sending shader BOs that are busy on the GPU.
This is a step in eliminating the rewrite-the-shaders root hole. Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r--drivers/gpu/drm/vc4/vc4_validate_shaders.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_validate_shaders.c b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
index 17c5bdcf5aa7..1f5e02783c96 100644
--- a/drivers/gpu/drm/vc4/vc4_validate_shaders.c
+++ b/drivers/gpu/drm/vc4/vc4_validate_shaders.c
@@ -381,6 +381,14 @@ vc4_validate_shader(struct drm_gem_cma_object *shader_obj)
if (shader_bo->validated_shader)
return shader_bo->validated_shader;
+ /* Our validation relies on nothing modifying the shader
+ * contents after us, so just ban sending us busy BOs.
+ */
+ if (shader_bo->seqno > vc4->finished_seqno) {
+ DRM_ERROR("shader BO is currently busy on the GPU.\n");
+ return NULL;
+ }
+
memset(&validation_state, 0, sizeof(validation_state));
for (i = 0; i < 8; i++)