aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch
blob: e8ae87257ade76915d69ba5a4562fb871090a1f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
From dc3a2c4818810b2dc5be400943da7dbf802482da Mon Sep 17 00:00:00 2001
From: Jordan Lazare <Jordan.Lazare@amd.com>
Date: Mon, 4 Apr 2016 19:43:13 -0400
Subject: [PATCH 1004/1110] drm/amd/dal: Fix incorrect max size of validation
 array

Was leading to stack corruption with >4 displays

Signed-off-by: Jordan Lazare <Jordan.Lazare@amd.com>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
---
 drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c | 12 ++++--------
 drivers/gpu/drm/amd/dal/dc/core/dc.c                |  2 +-
 drivers/gpu/drm/amd/dal/dc/dc.h                     |  4 +++-
 3 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
index a091d97..8ad78f5 100644
--- a/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
+++ b/drivers/gpu/drm/amd/dal/amdgpu_dm/amdgpu_dm_types.c
@@ -58,7 +58,6 @@ struct dm_connector_state {
 	container_of((x), struct dm_connector_state, base)
 
 #define AMDGPU_CRTC_MODE_PRIVATE_FLAGS_GAMMASET 1
-#define MAX_TARGET_NUM 6
 
 void amdgpu_dm_encoder_destroy(struct drm_encoder *encoder)
 {
@@ -813,9 +812,6 @@ static void fill_audio_info(
 
 }
 
-/*TODO: move these defines elsewhere*/
-#define DAL_MAX_CONTROLLERS 4
-
 static void copy_crtc_timing_for_drm_display_mode(
 		const struct drm_display_mode *src_mode,
 		struct drm_display_mode *dst_mode)
@@ -2110,8 +2106,8 @@ int amdgpu_dm_atomic_commit(
 	struct drm_crtc *crtc;
 	struct drm_crtc_state *old_crtc_state;
 
-	struct dc_target *commit_targets[DAL_MAX_CONTROLLERS];
-	struct amdgpu_crtc *new_crtcs[DAL_MAX_CONTROLLERS];
+	struct dc_target *commit_targets[MAX_TARGETS];
+	struct amdgpu_crtc *new_crtcs[MAX_TARGETS];
 
 	/* In this step all new fb would be pinned */
 
@@ -2516,8 +2512,8 @@ int amdgpu_dm_atomic_check(struct drm_device *dev,
 	int ret;
 	int set_count;
 	int new_target_count;
-	struct dc_validation_set set[MAX_TARGET_NUM] = {{ 0 }};
-	struct dc_target *new_targets[MAX_TARGET_NUM] = { 0 };
+	struct dc_validation_set set[MAX_TARGETS] = {{ 0 }};
+	struct dc_target *new_targets[MAX_TARGETS] = { 0 };
 	struct amdgpu_device *adev = dev->dev_private;
 	struct dc *dc = adev->dm.dc;
 	bool need_to_validate = false;
diff --git a/drivers/gpu/drm/amd/dal/dc/core/dc.c b/drivers/gpu/drm/amd/dal/dc/core/dc.c
index e71088d..d49ab5e 100644
--- a/drivers/gpu/drm/amd/dal/dc/core/dc.c
+++ b/drivers/gpu/drm/amd/dal/dc/core/dc.c
@@ -720,7 +720,7 @@ bool dc_commit_targets(
 	struct dc_bios *dcb = core_dc->ctx->dc_bios;
 	enum dc_status result = DC_ERROR_UNEXPECTED;
 	struct validate_context *context;
-	struct dc_validation_set set[4];
+	struct dc_validation_set set[MAX_TARGETS];
 	uint8_t i;
 
 	if (false == targets_changed(core_dc, targets, target_count))
diff --git a/drivers/gpu/drm/amd/dal/dc/dc.h b/drivers/gpu/drm/amd/dal/dc/dc.h
index e394dd2..dbc972f 100644
--- a/drivers/gpu/drm/amd/dal/dc/dc.h
+++ b/drivers/gpu/drm/amd/dal/dc/dc.h
@@ -33,6 +33,8 @@
 #include "gpio_types.h"
 #include "link_service_types.h"
 
+#define MAX_TARGETS 6
+#define MAX_SURFACES 6
 #define MAX_SINKS_PER_LINK 4
 
 /*******************************************************************************
@@ -271,7 +273,7 @@ enum dc_irq_source dc_target_get_irq_src(
  */
 struct dc_validation_set {
 	const struct dc_target *target;
-	const struct dc_surface *surfaces[4];
+	const struct dc_surface *surfaces[MAX_SURFACES];
 	uint8_t surface_count;
 };
 
-- 
2.7.4