Mesa (master): freedreno: fix context teardown race
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Aug 20 14:04:57 UTC 2018
Module: Mesa
Branch: master
Commit: e11e9d639439c32fe9dfa5af22abda2b54157771
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e11e9d639439c32fe9dfa5af22abda2b54157771
Author: Rob Clark <robdclark at gmail.com>
Date: Mon Aug 20 09:55:12 2018 -0400
freedreno: fix context teardown race
We could still have batches queued up to flush, so fd_context_destroy()
(which will kill and sync on the flush_queue) before deleting buffers
that might be referenced from fdN_gmem() from context of flush_queue.
Signed-off-by: Rob Clark <robdclark at gmail.com>
---
src/gallium/drivers/freedreno/a3xx/fd3_context.c | 4 ++--
src/gallium/drivers/freedreno/a4xx/fd4_context.c | 4 ++--
src/gallium/drivers/freedreno/a5xx/fd5_context.c | 4 ++--
src/gallium/drivers/freedreno/a6xx/fd6_context.c | 4 ++--
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/gallium/drivers/freedreno/a3xx/fd3_context.c b/src/gallium/drivers/freedreno/a3xx/fd3_context.c
index bb9dd2893e..c045133a27 100644
--- a/src/gallium/drivers/freedreno/a3xx/fd3_context.c
+++ b/src/gallium/drivers/freedreno/a3xx/fd3_context.c
@@ -44,6 +44,8 @@ fd3_context_destroy(struct pipe_context *pctx)
{
struct fd3_context *fd3_ctx = fd3_context(fd_context(pctx));
+ fd_context_destroy(pctx);
+
fd_bo_del(fd3_ctx->vs_pvt_mem);
fd_bo_del(fd3_ctx->fs_pvt_mem);
fd_bo_del(fd3_ctx->vsc_size_mem);
@@ -54,8 +56,6 @@ fd3_context_destroy(struct pipe_context *pctx)
fd_hw_query_fini(pctx);
- fd_context_destroy(pctx);
-
free(fd3_ctx);
}
diff --git a/src/gallium/drivers/freedreno/a4xx/fd4_context.c b/src/gallium/drivers/freedreno/a4xx/fd4_context.c
index 12505e83a6..97aae13bc6 100644
--- a/src/gallium/drivers/freedreno/a4xx/fd4_context.c
+++ b/src/gallium/drivers/freedreno/a4xx/fd4_context.c
@@ -44,6 +44,8 @@ fd4_context_destroy(struct pipe_context *pctx)
{
struct fd4_context *fd4_ctx = fd4_context(fd_context(pctx));
+ fd_context_destroy(pctx);
+
fd_bo_del(fd4_ctx->vs_pvt_mem);
fd_bo_del(fd4_ctx->fs_pvt_mem);
fd_bo_del(fd4_ctx->vsc_size_mem);
@@ -54,8 +56,6 @@ fd4_context_destroy(struct pipe_context *pctx)
fd_hw_query_fini(pctx);
- fd_context_destroy(pctx);
-
free(fd4_ctx);
}
diff --git a/src/gallium/drivers/freedreno/a5xx/fd5_context.c b/src/gallium/drivers/freedreno/a5xx/fd5_context.c
index 96e89bc854..d69b787064 100644
--- a/src/gallium/drivers/freedreno/a5xx/fd5_context.c
+++ b/src/gallium/drivers/freedreno/a5xx/fd5_context.c
@@ -44,6 +44,8 @@ fd5_context_destroy(struct pipe_context *pctx)
{
struct fd5_context *fd5_ctx = fd5_context(fd_context(pctx));
+ fd_context_destroy(pctx);
+
fd_bo_del(fd5_ctx->vs_pvt_mem);
fd_bo_del(fd5_ctx->fs_pvt_mem);
fd_bo_del(fd5_ctx->vsc_size_mem);
@@ -53,8 +55,6 @@ fd5_context_destroy(struct pipe_context *pctx)
u_upload_destroy(fd5_ctx->border_color_uploader);
- fd_context_destroy(pctx);
-
free(fd5_ctx);
}
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_context.c b/src/gallium/drivers/freedreno/a6xx/fd6_context.c
index 4c41548087..f67a0a7614 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_context.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_context.c
@@ -43,6 +43,8 @@ fd6_context_destroy(struct pipe_context *pctx)
{
struct fd6_context *fd6_ctx = fd6_context(fd_context(pctx));
+ fd_context_destroy(pctx);
+
fd_bo_del(fd6_ctx->vs_pvt_mem);
fd_bo_del(fd6_ctx->fs_pvt_mem);
fd_bo_del(fd6_ctx->vsc_size_mem);
@@ -52,8 +54,6 @@ fd6_context_destroy(struct pipe_context *pctx)
u_upload_destroy(fd6_ctx->border_color_uploader);
- fd_context_destroy(pctx);
-
free(fd6_ctx);
}
More information about the mesa-commit
mailing list