diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch b/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch new file mode 100644 index 00000000..e8ae8725 --- /dev/null +++ b/common/recipes-kernel/linux/files/1004-drm-amd-dal-Fix-incorrect-max-size-of-validation-arr.patch @@ -0,0 +1,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 + |