aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch79
1 files changed, 79 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch
new file mode 100644
index 00000000..537f9d26
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/0363-drm-amd-display-fix-memory-leak.patch
@@ -0,0 +1,79 @@
+From 737c88865f78725772f21cd565f4af8f777065e8 Mon Sep 17 00:00:00 2001
+From: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Date: Tue, 18 Apr 2017 17:31:46 -0400
+Subject: [PATCH 0363/4131] drm/amd/display: fix memory leak
+
+Signed-off-by: Dmytro Laktyushkin <Dmytro.Laktyushkin@amd.com>
+Reviewed-by: Harry Wentland <Harry.Wentland@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/display/dc/core/dc.c | 26 ++++++++++++--------------
+ 1 file changed, 12 insertions(+), 14 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c b/drivers/gpu/drm/amd/display/dc/core/dc.c
+index b1f0a50..1dd9c73 100644
+--- a/drivers/gpu/drm/amd/display/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
+@@ -918,7 +918,6 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc)
+ int i;
+ struct core_dc *core_dc = DC_TO_CORE(dc);
+ struct validate_context *context = dm_alloc(sizeof(struct validate_context));
+- bool result = true;
+
+ if (!context) {
+ dm_error("%s: failed to create validate ctx\n", __func__);
+@@ -927,28 +926,29 @@ bool dc_post_update_surfaces_to_stream(struct dc *dc)
+ dc_resource_validate_ctx_copy_construct(core_dc->current_context, context);
+
+ post_surface_trace(dc);
++
+ for (i = 0; i < context->res_ctx.pool->pipe_count; i++)
+ if (context->res_ctx.pipe_ctx[i].stream == NULL) {
+ context->res_ctx.pipe_ctx[i].pipe_idx = i;
+ core_dc->hwss.power_down_front_end(
+ core_dc, &context->res_ctx.pipe_ctx[i]);
+ }
+-
+ if (!core_dc->res_pool->funcs->validate_bandwidth(core_dc, context)) {
+ BREAK_TO_DEBUGGER();
+- result = false;
+- goto cleanup;
++ dc_resource_validate_ctx_destruct(context);
++ dm_free(context);
++ return false;
+ }
+
+ core_dc->hwss.set_bandwidth(core_dc, context, true);
+
+- dc_resource_validate_ctx_copy_construct(context, core_dc->current_context);
+-
+-cleanup:
+- dc_resource_validate_ctx_destruct(context);
+- dm_free(context);
++ if (core_dc->current_context) {
++ dc_resource_validate_ctx_destruct(core_dc->current_context);
++ dm_free(core_dc->current_context);
++ }
++ core_dc->current_context = context;
+
+- return result;
++ return true;
+ }
+
+ bool dc_commit_surfaces_to_stream(
+@@ -1440,10 +1440,8 @@ void dc_update_surfaces_and_stream(struct dc *dc,
+ return;
+
+ fail:
+- if (core_dc->current_context != context) {
+- dc_resource_validate_ctx_destruct(context);
+- dm_free(context);
+- }
++ dc_resource_validate_ctx_destruct(context);
++ dm_free(context);
+ }
+
+ uint8_t dc_get_current_stream_count(const struct dc *dc)
+--
+2.7.4
+