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
|