summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/panfrost/pan_context.c
diff options
context:
space:
mode:
authorRohan Garg <[email protected]>2019-08-30 18:00:12 +0200
committerBoris Brezillon <[email protected]>2019-08-30 22:06:54 +0200
commit6b0dc3d53011b384798bcdb5d5e804d7482a3247 (patch)
tree414572b258a75a860b486735328aff6800f32508 /src/gallium/drivers/panfrost/pan_context.c
parentbd98470a4692860004c1e9282808a638758c6f04 (diff)
panfrost: Jobs must be per context, not per screen
Jobs _must_ only be shared across the same context, having the last_job tracked in a screen causes use-after-free issues and memory corruptions. Signed-off-by: Rohan Garg <[email protected]> Reviewed-by: Boris Brezillon <[email protected]> Reviewed-by: Alyssa Rosenzweig <[email protected]> Signed-off-by: Boris Brezillon <[email protected]>
Diffstat (limited to 'src/gallium/drivers/panfrost/pan_context.c')
-rw-r--r--src/gallium/drivers/panfrost/pan_context.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/gallium/drivers/panfrost/pan_context.c b/src/gallium/drivers/panfrost/pan_context.c
index fa9c92af9f6..94ee9b5bdb2 100644
--- a/src/gallium/drivers/panfrost/pan_context.c
+++ b/src/gallium/drivers/panfrost/pan_context.c
@@ -1329,9 +1329,6 @@ panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate,
struct pipe_fence_handle **fence,
struct panfrost_job *job)
{
- struct pipe_context *gallium = (struct pipe_context *) ctx;
- struct panfrost_screen *screen = pan_screen(gallium->screen);
-
panfrost_job_submit(ctx, job);
/* If visual, we can stall a frame */
@@ -1339,8 +1336,8 @@ panfrost_submit_frame(struct panfrost_context *ctx, bool flush_immediate,
if (!flush_immediate)
panfrost_drm_force_flush_fragment(ctx, fence);
- screen->last_fragment_flushed = false;
- screen->last_job = job;
+ ctx->last_fragment_flushed = false;
+ ctx->last_job = job;
/* If readback, flush now (hurts the pipelined performance) */
if (flush_immediate)
@@ -2856,6 +2853,9 @@ panfrost_create_context(struct pipe_screen *screen, void *priv, unsigned flags)
assert(ctx->blitter);
assert(ctx->blitter_wallpaper);
+ ctx->last_fragment_flushed = true;
+ ctx->last_job = NULL;
+
/* Prepare for render! */
panfrost_job_init(ctx);