[PATCH 042/103] drm/amd/display: Fix ref_count messed up issue
Harry Wentland
harry.wentland at amd.com
Tue Oct 10 22:40:11 UTC 2017
From: Jerry Zuo <Jerry.Zuo at amd.com>
In the full update type, need to add ref_count to the newly
created dc_state->stream. It made mistake to add ref_count to
dc->current_state->stream which keeps adding up without release.
Signed-off-by: Jerry Zuo <Jerry.Zuo at amd.com>
Reviewed-by: Roman Li <Roman.Li at amd.com>
Acked-by: Harry Wentland <Harry.Wentland at amd.com>
---
drivers/gpu/drm/amd/display/dc/core/dc.c | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
index ffc36f5ac50c..3439bc46a4a2 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
@@ -1322,6 +1322,7 @@ void dc_commit_updates_for_stream(struct dc *dc,
const struct dc_stream_status *stream_status;
enum surface_update_type update_type;
struct dc_state *context;
+ struct dc_context *dc_ctx = dc->ctx;
int i;
stream_status = dc_stream_get_status(stream);
@@ -1334,8 +1335,17 @@ void dc_commit_updates_for_stream(struct dc *dc,
update_surface_trace(dc, srf_updates, surface_count);
- if (update_type >= UPDATE_TYPE_FULL)
+ if (update_type >= UPDATE_TYPE_FULL) {
+
+ /* initialize scratch memory for building context */
+ context = dc_create_state();
+ if (context == NULL) {
+ DC_ERROR("Failed to allocate new validate context!\n");
+ return;
+ }
+
dc_resource_state_copy_construct(state, context);
+ }
for (i = 0; i < surface_count; i++) {
@@ -1361,6 +1371,15 @@ void dc_commit_updates_for_stream(struct dc *dc,
dc_post_update_surfaces_to_stream(dc);
+ if (dc->current_state != context) {
+
+ struct dc_state *old = dc->current_state;
+
+ dc->current_state = context;
+ dc_release_state(old);
+
+ }
+
return;
}
--
2.14.1
More information about the amd-gfx
mailing list