From: Austin Zheng <austin.zh...@amd.com>

[ Upstream commit eba692ca3abca258b3214a6e4126afefad1822f0 ]

[Why]
Memory allocation occurs within dml21_validate() for adding phantom planes.
May cause kernel to be tainted due to usage of FP Start.

[How]
Move FP start from dml21_validate to before mode programming/mode support.
Calculations requiring floating point are all done within mode programming
or mode support.

Reviewed-by: Alvin Lee <alvin.l...@amd.com>
Signed-off-by: Austin Zheng <austin.zh...@amd.com>
Signed-off-by: Ray Wu <ray...@amd.com>
Tested-by: Daniel Wheeler <daniel.whee...@amd.com>
Signed-off-by: Alex Deucher <alexander.deuc...@amd.com>
(cherry picked from commit fe3250f10819b411808ab9ae1d824c5fc9b59170)
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c 
b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
index d6fd13f43c08f..e011dc56be828 100644
--- a/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
+++ b/drivers/gpu/drm/amd/display/dc/dml2/dml21/dml21_wrapper.c
@@ -220,7 +220,9 @@ static bool dml21_mode_check_and_programming(const struct 
dc *in_dc, struct dc_s
        if (!result)
                return false;
 
+       DC_FP_START();
        result = dml2_build_mode_programming(mode_programming);
+       DC_FP_END();
        if (!result)
                return false;
 
@@ -263,7 +265,9 @@ static bool dml21_check_mode_support(const struct dc 
*in_dc, struct dc_state *co
        mode_support->dml2_instance = dml_init->dml2_instance;
        dml21_map_dc_state_into_dml_display_cfg(in_dc, context, dml_ctx);
        
dml_ctx->v21.mode_programming.dml2_instance->scratch.build_mode_programming_locals.mode_programming_params.programming
 = dml_ctx->v21.mode_programming.programming;
+       DC_FP_START();
        is_supported = dml2_check_mode_supported(mode_support);
+       DC_FP_END();
        if (!is_supported)
                return false;
 
@@ -274,16 +278,12 @@ bool dml21_validate(const struct dc *in_dc, struct 
dc_state *context, struct dml
 {
        bool out = false;
 
-       DC_FP_START();
-
        /* Use dml_validate_only for fast_validate path */
        if (fast_validate)
                out = dml21_check_mode_support(in_dc, context, dml_ctx);
        else
                out = dml21_mode_check_and_programming(in_dc, context, dml_ctx);
 
-       DC_FP_END();
-
        return out;
 }
 
-- 
2.39.5

Reply via email to