From: Andrey Grodzovsky <Andrey.Grodzovsky@xxxxxxx> Curent_context is zerroed out for suspend, keep the refcount. Minor code move in dc_commit_context_no_check Change-Id: I45b7fa4b0a7df54f1621f6306ef9e31c9ebe25eb Signed-off-by: Andrey Grodzovsky <Andrey.Grodzovsky at amd.com> Reviewed-by: Tony Cheng <Tony.Cheng at amd.com> Acked-by: Harry Wentland <Harry.Wentland at amd.com> --- 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