diff options
author | Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com> | 2017-05-17 16:05:40 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-09-26 18:07:17 -0400 |
commit | 430ef426bc43b59a7444c08d664e24a7cf89710e (patch) | |
tree | 1e820da524f9e5fc49906c79e46ed72eb80324e6 /drivers/gpu/drm/amd/display/dc/dce100 | |
parent | ccaf31ec714b596d1edb92b1ed4ccc4abf1f645c (diff) | |
download | linux-stable-430ef426bc43b59a7444c08d664e24a7cf89710e.tar.gz linux-stable-430ef426bc43b59a7444c08d664e24a7cf89710e.tar.bz2 linux-stable-430ef426bc43b59a7444c08d664e24a7cf89710e.zip |
drm/amd/display: make dc_get_validate_context re-entrant
Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
Reviewed-by: Tony Cheng <Tony.Cheng@amd.com>
Acked-by: Harry Wentland <Harry.Wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/display/dc/dce100')
-rw-r--r-- | drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c index 8f1fe95dd76c..716f664f40ce 100644 --- a/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c +++ b/drivers/gpu/drm/amd/display/dc/dce100/dce100_resource.c @@ -653,7 +653,8 @@ static void destruct(struct dce110_resource_pool *pool) static enum dc_status validate_mapped_resource( const struct core_dc *dc, - struct validate_context *context) + struct validate_context *context, + struct validate_context *old_context) { enum dc_status status = DC_OK; uint8_t i, j; @@ -662,7 +663,7 @@ static enum dc_status validate_mapped_resource( struct core_stream *stream = context->streams[i]; struct core_link *link = stream->sink->link; - if (resource_is_stream_unchanged(dc->current_context, stream)) + if (old_context && resource_is_stream_unchanged(old_context, stream)) continue; for (j = 0; j < MAX_PIPES; j++) { @@ -740,7 +741,8 @@ enum dc_status dce100_validate_with_context( const struct core_dc *dc, const struct dc_validation_set set[], int set_count, - struct validate_context *context) + struct validate_context *context, + struct validate_context *old_context) { struct dc_context *dc_ctx = dc->ctx; enum dc_status result = DC_ERROR_UNEXPECTED; @@ -755,19 +757,19 @@ enum dc_status dce100_validate_with_context( context->stream_count++; } - result = resource_map_pool_resources(dc, context); + result = resource_map_pool_resources(dc, context, old_context); if (result == DC_OK) - result = resource_map_clock_resources(dc, context); + result = resource_map_clock_resources(dc, context, old_context); if (!resource_validate_attach_surfaces(set, set_count, - dc->current_context, context, dc->res_pool)) { + old_context, context, dc->res_pool)) { DC_ERROR("Failed to attach surface to stream!\n"); return DC_FAIL_ATTACH_SURFACES; } if (result == DC_OK) - result = validate_mapped_resource(dc, context); + result = validate_mapped_resource(dc, context, old_context); if (result == DC_OK) result = resource_build_scaling_params_for_context(dc, context); @@ -790,13 +792,13 @@ enum dc_status dce100_validate_guaranteed( dc_stream_retain(&context->streams[0]->public); context->stream_count++; - result = resource_map_pool_resources(dc, context); + result = resource_map_pool_resources(dc, context, NULL); if (result == DC_OK) - result = resource_map_clock_resources(dc, context); + result = resource_map_clock_resources(dc, context, NULL); if (result == DC_OK) - result = validate_mapped_resource(dc, context); + result = validate_mapped_resource(dc, context, NULL); if (result == DC_OK) { validate_guaranteed_copy_streams( |