diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index 70dc70685471d75dfe5c177d037ac9521fb450ac..a3c5def507a9ca757fa27d2d9a80a8faaf6129c4 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -452,6 +452,8 @@ static void destruct(struct core_dc *dc) dm_free(dc->temp_flip_context); dc->temp_flip_context = NULL; + dm_free(dc->scratch_val_ctx); + dc->scratch_val_ctx = NULL; destroy_links(dc); @@ -490,6 +492,7 @@ static bool construct(struct core_dc *dc, dc->current_context = dm_alloc(sizeof(*dc->current_context)); dc->temp_flip_context = dm_alloc(sizeof(*dc->temp_flip_context)); + dc->scratch_val_ctx = dm_alloc(sizeof(*dc->temp_flip_context)); if (!dc->current_context || !dc->temp_flip_context) { dm_error("%s: failed to create validate ctx\n", __func__); @@ -1217,7 +1220,7 @@ bool dc_pre_update_surfaces_to_target( goto unexpected_fail; } resource_validate_ctx_destruct(context); - dm_free(context); + core_dc->scratch_val_ctx = context; context = temp_context; } diff --git a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h index 7d6dc8ea75ab38d16921bbd5ff20d4b8beb575db..b5a5207a4df08626d62456604e2e9f83fc1008c7 100644 --- a/drivers/gpu/drm/amd/display/dc/inc/core_dc.h +++ b/drivers/gpu/drm/amd/display/dc/inc/core_dc.h @@ -24,6 +24,7 @@ struct core_dc { /* TODO: determine max number of targets*/ struct validate_context *current_context; struct validate_context *temp_flip_context; + struct validate_context *scratch_val_ctx; struct resource_pool *res_pool; /*Power State*/