On 2024-04-23 09:59, Srinivasan Shanmugam wrote:
> This commit removes an unnecessary NULL check in the
> `dcn20_set_input_transfer_func` function in the `dcn20_hwseq.c` file.
> The variable `tf` is assigned the address of
> `plane_state->in_transfer_func` unconditionally, so it can never be
> `NULL`. Therefore, the check `if (tf == NULL)` is unnecessary and has
> been removed.
>
> The plane_state->in_transfer_func itself cannot be NULL because it's a
> structure, not a pointer. When we do tf =
> &plane_state->in_transfer_func;, we're getting the address of that
> structure, which will always be valid as long as plane_state itself is
> not NULL.
>
> we've already checked if plane_state is NULL with the line if (dpp_base
> == NULL || plane_state == NULL) return false;. So, if the code execution
> gets to the point where tf = &plane_state->in_transfer_func; is called,
> plane_state is guaranteed to be not NULL, and therefore tf will also not
> be NULL.
>
> drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn20/dcn20_hwseq.c
> 1094 bool dcn20_set_input_transfer_func(struct dc *dc,
> 1095 struct pipe_ctx *pipe_ctx,
> 1096 const struct dc_plane_state
> *plane_state)
> 1097 {
> 1098 struct dce_hwseq *hws = dc->hwseq;
> 1099 struct dpp *dpp_base = pipe_ctx->plane_res.dpp;
> 1100 const struct dc_transfer_func *tf = NULL;
> ^^^^^^^^^ This assignment is
> not necessary now.
>
> 1101 bool result = true;
> 1102 bool use_degamma_ram = false;
> 1103
> 1104 if (dpp_base == NULL || plane_state == NULL)
> 1105 return false;
> 1106
> 1107 hws->funcs.set_shaper_3dlut(pipe_ctx, plane_state);
> 1108 hws->funcs.set_blend_lut(pipe_ctx, plane_state);
> 1109
> 1110 tf = &plane_state->in_transfer_func;
> ^^^^^
> Before there was an if statement but now tf is assigned unconditionally
>
> 1111
> --> 1112 if (tf == NULL) {
> ^^^^^^^^^^^^^^^^^
> so these conditions are impossible.
>
> 1113 dpp_base->funcs->dpp_set_degamma(dpp_base,
> 1114 IPP_DEGAMMA_MODE_BYPASS);
> 1115 return true;
> 1116 }
> 1117
> 1118 if (tf->type == TF_TYPE_HWPWL || tf->type ==
> TF_TYPE_DISTRIBUTED_POINTS)
> 1119 use_degamma_ram = true;
> 1120
> 1121 if (use_degamma_ram == true) {
> 1122 if (tf->type == TF_TYPE_HWPWL)
> 1123
> dpp_base->funcs->dpp_program_degamma_pwl(dpp_base,
>
> Fixes the below Smatch static checker warning:
> drivers/gpu/drm/amd/amdgpu/../display/dc/hwss/dcn20/dcn20_hwseq.c:1112
> dcn20_set_input_transfer_func() warn: address of
> 'plane_state->in_transfer_func' is non-NULL
>
> Fixes: 285a7054bf81 ("drm/amd/display: Remove plane and stream pointers from
> dc scratch")
> Cc: Wenjing Liu <wenjing....@amd.com>
> Cc: Tom Chung <chiahsuan.ch...@amd.com>
> Cc: Alvin Lee <alvin.l...@amd.com>
> Cc: Rodrigo Siqueira <rodrigo.sique...@amd.com>
> Cc: Roman Li <roman...@amd.com>
> Cc: Qingqing Zhuo <qingqing.z...@amd.com>
> Cc: Aurabindo Pillai <aurabindo.pil...@amd.com>
> Cc: Harry Wentland <harry.wentl...@amd.com>
> Suggested-by: Dan Carpenter <dan.carpen...@linaro.org>
> Signed-off-by: Srinivasan Shanmugam <srinivasan.shanmu...@amd.com>
Previously plane_state->in_transfer_func was a pointer but that was
changed recently. Looks like this place was missed.
Reviewed-by: Harry Wentland <harry.wentl...@amd.com>
Harry
> ---
> drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 6 ------
> 1 file changed, 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
> b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
> index b60ba2a110f7..58fbdd535068 100644
> --- a/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
> +++ b/drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c
> @@ -1109,12 +1109,6 @@ bool dcn20_set_input_transfer_func(struct dc *dc,
>
> tf = &plane_state->in_transfer_func;
>
> - if (tf == NULL) {
> - dpp_base->funcs->dpp_set_degamma(dpp_base,
> - IPP_DEGAMMA_MODE_BYPASS);
> - return true;
> - }
> -
> if (tf->type == TF_TYPE_HWPWL || tf->type == TF_TYPE_DISTRIBUTED_POINTS)
> use_degamma_ram = true;
>