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) ...@@ -702,13 +702,11 @@ dm_atomic_state_alloc(struct drm_device *dev)
goto fail; goto fail;
/* copy existing configuration */ /* copy existing configuration */
new_ctx = dm_alloc(sizeof(*new_ctx)); new_ctx = dc_create_state();
if (!new_ctx) if (!new_ctx)
goto fail; goto fail;
atomic_inc(&new_ctx->ref_count);
dc_resource_validate_ctx_copy_construct_current(dc, new_ctx); dc_resource_validate_ctx_copy_construct_current(dc, new_ctx);
state->context = new_ctx; state->context = new_ctx;
......
...@@ -497,15 +497,13 @@ static bool construct(struct dc *dc, ...@@ -497,15 +497,13 @@ static bool construct(struct dc *dc,
goto fail; goto fail;
} }
dc->current_context = dm_alloc(sizeof(*dc->current_context)); dc->current_context = dc_create_state();
if (!dc->current_context) { if (!dc->current_context) {
dm_error("%s: failed to create validate ctx\n", __func__); dm_error("%s: failed to create validate ctx\n", __func__);
goto fail; goto fail;
} }
atomic_inc(&dc->current_context->ref_count);
dc_ctx->cgs_device = init_params->cgs_device; dc_ctx->cgs_device = init_params->cgs_device;
dc_ctx->driver_context = init_params->driver; dc_ctx->driver_context = init_params->driver;
dc_ctx->dc = dc; dc_ctx->dc = dc;
...@@ -1162,6 +1160,17 @@ bool dc_commit_planes_to_stream( ...@@ -1162,6 +1160,17 @@ bool dc_commit_planes_to_stream(
return true; 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) void dc_retain_validate_context(struct validate_context *context)
{ {
ASSERT(atomic_read(&context->ref_count) > 0); ASSERT(atomic_read(&context->ref_count) > 0);
...@@ -1442,12 +1451,10 @@ void dc_update_planes_and_stream(struct dc *dc, ...@@ -1442,12 +1451,10 @@ void dc_update_planes_and_stream(struct dc *dc,
new_planes[i] = srf_updates[i].surface; new_planes[i] = srf_updates[i].surface;
/* initialize scratch memory for building context */ /* initialize scratch memory for building context */
context = dm_alloc(sizeof(*context)); context = dc_create_state();
if (context == NULL) if (context == NULL)
goto context_alloc_fail; goto context_alloc_fail;
atomic_inc(&context->ref_count);
dc_resource_validate_ctx_copy_construct( dc_resource_validate_ctx_copy_construct(
core_dc->current_context, context); core_dc->current_context, context);
......
...@@ -732,6 +732,7 @@ enum surface_update_type dc_check_update_surfaces_for_stream( ...@@ -732,6 +732,7 @@ enum surface_update_type dc_check_update_surfaces_for_stream(
const struct dc_stream_status *stream_status); 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_retain_validate_context(struct validate_context *context);
void dc_release_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