aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch')
-rw-r--r--common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch46
1 files changed, 46 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch b/common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch
new file mode 100644
index 00000000..9298275b
--- /dev/null
+++ b/common/recipes-kernel/linux/files/0824-drm-amd-dal-fix-stack-corruption-during-timing-sync.patch
@@ -0,0 +1,46 @@
+From e16926637ab52359896219cab89e4a4bd78c8e87 Mon Sep 17 00:00:00 2001
+From: Mykola Lysenko <Mykola.Lysenko@amd.com>
+Date: Fri, 19 Feb 2016 05:45:19 -0500
+Subject: [PATCH 0824/1110] drm/amd/dal: fix stack corruption during timing
+ sync
+
+Issue happens when more than 3 displays enabled. During
+fbdev initialization one surface allocated with smallest
+size selected among available displays. This is why same
+timing set on all displays and decided to enable timing sync.
+
+Array on stack was for 3 elements only. Now it is allocated
+in heap with size relevant to number of targets
+
+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.c | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+index 1d1cd89..666e248 100644
+--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
++++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
+@@ -470,7 +470,7 @@ static void program_timing_sync(
+ uint8_t j;
+ uint8_t group_size = 0;
+ uint8_t tg_count = ctx->res_ctx.pool.pipe_count;
+- struct timing_generator *tg_set[3];
++ struct timing_generator *tg_set[MAX_PIPES];
+
+ for (i = 0; i < tg_count; i++) {
+ if (!ctx->res_ctx.pipe_ctx[i].stream)
+@@ -487,8 +487,7 @@ static void program_timing_sync(
+ continue;
+
+ if (is_same_timing(
+- &ctx->res_ctx.pipe_ctx[j].stream->public
+- .timing,
++ &ctx->res_ctx.pipe_ctx[j].stream->public.timing,
+ &ctx->res_ctx.pipe_ctx[i].stream->public
+ .timing)) {
+ tg_set[group_size] =
+--
+2.7.4
+