From b432ad86f8069bdba6b4776790386f23ee6e5755 Mon Sep 17 00:00:00 2001 From: Andrey Grodzovsky Date: Thu, 13 Jul 2017 10:52:47 -0400 Subject: [PATCH 0617/4131] drm/amd/display: Preserve refcount for S3 case. Curent_context is zerroed out for suspend, keep the refcount. Minor code move in dc_commit_context_no_check Signed-off-by: Andrey Grodzovsky Reviewed-by: Tony Cheng Acked-by: Harry Wentland Signed-off-by: Alex Deucher --- drivers/gpu/drm/amd/display/dc/core/dc.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c index 8e580ac..20f4199 100644 --- a/drivers/gpu/drm/amd/display/dc/core/dc.c +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c @@ -977,10 +977,10 @@ static bool dc_commit_context_no_check(struct dc *dc, struct validate_context *c dc_release_validate_context(core_dc->current_context); - dc_retain_validate_context(context); - core_dc->current_context = context; + dc_retain_validate_context(core_dc->current_context); + return (result == DC_OK); } @@ -1065,8 +1065,6 @@ bool dc_commit_streams( result = dc_commit_context_no_check(dc, context); - return (result == DC_OK); - fail: dc_release_validate_context(context); @@ -1736,6 +1734,7 @@ void dc_set_power_state( enum dc_acpi_cm_power_state power_state) { struct core_dc *core_dc = DC_TO_CORE(dc); + int ref_count; switch (power_state) { case DC_ACPI_CM_POWER_STATE_D0: @@ -1749,8 +1748,13 @@ void dc_set_power_state( * clean state, and dc hw programming optimizations will not * cause any trouble. */ + + /* Preserve refcount */ + ref_count = core_dc->current_context->ref_count; + dc_resource_validate_ctx_destruct(core_dc->current_context); memset(core_dc->current_context, 0, sizeof(*core_dc->current_context)); + core_dc->current_context->ref_count = ref_count; break; } -- 2.7.4