Commit 81c90ec0 authored by Leo (Sunpeng) Li's avatar Leo (Sunpeng) Li Committed by Alex Deucher

drm/amd/display: Refactor dc_state creation into a function.

For less repetition and easy debugging.
Signed-off-by: default avatarLeo (Sunpeng) Li <sunpeng.li@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 1dc90497
......@@ -702,13 +702,11 @@ dm_atomic_state_alloc(struct drm_device *dev)
goto fail;
/* copy existing configuration */
new_ctx = dm_alloc(sizeof(*new_ctx));
new_ctx = dc_create_state();
if (!new_ctx)
goto fail;
atomic_inc(&new_ctx->ref_count);
dc_resource_validate_ctx_copy_construct_current(dc, new_ctx);
state->context = new_ctx;
......
......@@ -497,15 +497,13 @@ static bool construct(struct dc *dc,
goto fail;
}
dc->current_context = dm_alloc(sizeof(*dc->current_context));
dc->current_context = dc_create_state();
if (!dc->current_context) {
dm_error("%s: failed to create validate ctx\n", __func__);
goto fail;
}
atomic_inc(&dc->current_context->ref_count);
dc_ctx->cgs_device = init_params->cgs_device;
dc_ctx->driver_context = init_params->driver;
dc_ctx->dc = dc;
......@@ -1162,6 +1160,17 @@ bool dc_commit_planes_to_stream(
return true;
}
struct validate_context *dc_create_state(void)
{
struct validate_context *context = dm_alloc(sizeof(struct validate_context));
if (!context)
return NULL;
atomic_inc(&context->ref_count);
return context;
}
void dc_retain_validate_context(struct validate_context *context)
{
ASSERT(atomic_read(&context->ref_count) > 0);
......@@ -1442,12 +1451,10 @@ void dc_update_planes_and_stream(struct dc *dc,
new_planes[i] = srf_updates[i].surface;
/* initialize scratch memory for building context */
context = dm_alloc(sizeof(*context));
context = dc_create_state();
if (context == NULL)
goto context_alloc_fail;
atomic_inc(&context->ref_count);
dc_resource_validate_ctx_copy_construct(
core_dc->current_context, context);
......
......@@ -732,6 +732,7 @@ enum surface_update_type dc_check_update_surfaces_for_stream(
const struct dc_stream_status *stream_status);
struct validate_context *dc_create_state(void);
void dc_retain_validate_context(struct validate_context *context);
void dc_release_validate_context(struct validate_context *context);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment