aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch')
-rw-r--r--common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch89
1 files changed, 89 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch b/common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch
new file mode 100644
index 00000000..8e75566a
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0855-drm-amd-dal-fix-memory-during-fail-link-creation.patch
@@ -0,0 +1,89 @@
+From cfb494199e72b18539e80a266470b40110221eb4 Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Fri, 26 Feb 2016 04:06:56 -0500
+Subject: [PATCH 0855/1110] drm/amd/dal: fix memory during fail link creation
+
+In case device tag is incorrect, already allocated
+resources should be cleaned-up
+
+Signed-off-by: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Acked-by: Harry Wentland <harry.wentland@amd.com>
+---
+ drivers/gpu/drm/amd/dal/dc/core/dc_link.c | 28 ++++++++++++++++++++--------
+ 1 file changed, 20 insertions(+), 8 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+index e259509..9bfa35b 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc_link.c
+@@ -954,6 +954,8 @@ static bool construct(
+ if (hpd_gpio != NULL) {
+ dal_adapter_service_release_irq(
+ as, hpd_gpio);
++
++ hpd_gpio = NULL;
+ }
+
+ /* TODO: #DAL3 Implement id to str function.*/
+@@ -968,15 +970,15 @@ static bool construct(
+ ddc_service_init_data.link = link;
+ link->ddc = dal_ddc_service_create(&ddc_service_init_data);
+
+- link->public.ddc_hw_inst =
+- dal_ddc_get_line(
+- dal_ddc_service_get_ddc_pin(link->ddc));
+-
+ if (NULL == link->ddc) {
+ DC_ERROR("Failed to create ddc_service!\n");
+- goto create_fail;
++ goto ddc_create_fail;
+ }
+
++ link->public.ddc_hw_inst =
++ dal_ddc_get_line(
++ dal_ddc_service_get_ddc_pin(link->ddc));
++
+ enc_init_data.adapter_service = as;
+ enc_init_data.ctx = dc_ctx;
+ enc_init_data.encoder = dal_adapter_service_get_src_obj(
+@@ -991,7 +993,7 @@ static bool construct(
+
+ if( link->link_enc == NULL) {
+ DC_ERROR("Failed to create link encoder!\n");
+- goto create_fail;
++ goto link_enc_create_fail;
+ }
+
+ link->public.link_enc_hw_inst = link->link_enc->transmitter;
+@@ -1002,7 +1004,7 @@ static bool construct(
+ if (!dal_adapter_service_get_device_tag(
+ as, link->link_id, i, &link->device_tag)) {
+ DC_ERROR("Failed to find device tag!\n");
+- goto create_fail;
++ goto device_tag_fail;
+ }
+
+ /* Look for device tag that matches connector signal,
+@@ -1046,8 +1048,18 @@ static bool construct(
+ program_hpd_filter(link);
+
+ return true;
+-
++device_tag_fail:
++ link->ctx->dc->res_pool.funcs->link_enc_destroy(&link->link_enc);
++link_enc_create_fail:
++ dal_ddc_service_destroy(&link->ddc);
++ddc_create_fail:
+ create_fail:
++
++ if (hpd_gpio != NULL) {
++ dal_adapter_service_release_irq(
++ as, hpd_gpio);
++ }
++
+ return false;
+ }
+
+--
+2.7.4
+