drm/amd/display: Call FP Protect Before Mode Programming/Mode Support
[ 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.lee2@amd.com> Signed-off-by: Austin Zheng <Austin.Zheng@amd.com> Signed-off-by: Ray Wu <ray.wu@amd.com> Tested-by: Daniel Wheeler <daniel.wheeler@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com> (cherry picked from commit fe3250f10819b411808ab9ae1d824c5fc9b59170) Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
211f589206
commit
a0c50c9f9c
@@ -221,7 +221,9 @@ static bool dml21_mode_check_and_programming(const struct dc *in_dc, struct dc_s
|
|||||||
if (!result)
|
if (!result)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
DC_FP_START();
|
||||||
result = dml2_build_mode_programming(mode_programming);
|
result = dml2_build_mode_programming(mode_programming);
|
||||||
|
DC_FP_END();
|
||||||
if (!result)
|
if (!result)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -271,7 +273,9 @@ static bool dml21_check_mode_support(const struct dc *in_dc, struct dc_state *co
|
|||||||
mode_support->dml2_instance = dml_init->dml2_instance;
|
mode_support->dml2_instance = dml_init->dml2_instance;
|
||||||
dml21_map_dc_state_into_dml_display_cfg(in_dc, context, dml_ctx);
|
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;
|
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);
|
is_supported = dml2_check_mode_supported(mode_support);
|
||||||
|
DC_FP_END();
|
||||||
if (!is_supported)
|
if (!is_supported)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
@@ -282,16 +286,12 @@ bool dml21_validate(const struct dc *in_dc, struct dc_state *context, struct dml
|
|||||||
{
|
{
|
||||||
bool out = false;
|
bool out = false;
|
||||||
|
|
||||||
DC_FP_START();
|
|
||||||
|
|
||||||
/* Use dml_validate_only for fast_validate path */
|
/* Use dml_validate_only for fast_validate path */
|
||||||
if (fast_validate)
|
if (fast_validate)
|
||||||
out = dml21_check_mode_support(in_dc, context, dml_ctx);
|
out = dml21_check_mode_support(in_dc, context, dml_ctx);
|
||||||
else
|
else
|
||||||
out = dml21_mode_check_and_programming(in_dc, context, dml_ctx);
|
out = dml21_mode_check_and_programming(in_dc, context, dml_ctx);
|
||||||
|
|
||||||
DC_FP_END();
|
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user