[bug report] drm/amd/display: Add Functions to enable Freesync Panel Replay

Dan Carpenter dan.carpenter at linaro.org
Wed Aug 9 08:12:39 UTC 2023


Hello Bhawanpreet Lakha,

The patch c7ddc0a800bc: "drm/amd/display: Add Functions to enable
Freesync Panel Replay" from May 12, 2023 (linux-next), leads to the
following Smatch static checker warning:

    drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_edp_panel_control.c:849
    edp_set_replay_allow_active()
    error: we previously assumed 'replay' could be null (see line 841)

    drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_edp_panel_control.c:932
    edp_setup_replay()
    warn: duplicate check 'replay' (previous on line 904)

drivers/gpu/drm/amd/amdgpu/../display/dc/link/protocols/link_edp_panel_control.c
    834 bool edp_set_replay_allow_active(struct dc_link *link, const bool *allow_active,
    835         bool wait, bool force_static, const unsigned int *power_opts)
    836 {
    837         struct dc  *dc = link->ctx->dc;
    838         struct dmub_replay *replay = dc->res_pool->replay;
    839         unsigned int panel_inst;
    840 
    841         if (replay == NULL && force_static)

replay is allow to be NULL if force_static is false.

    842                 return false;
    843 
    844         if (!dc_get_edp_link_panel_inst(dc, link, &panel_inst))
    845                 return false;
    846 
    847         /* Set power optimization flag */
    848         if (power_opts && link->replay_settings.replay_power_opt_active != *power_opts) {
--> 849                 if (link->replay_settings.replay_feature_enabled && replay->funcs->replay_set_power_opt) {
                                                                            ^^^^^^^^
Unchecked dereference.

    850                         replay->funcs->replay_set_power_opt(replay, *power_opts, panel_inst);
    851                         link->replay_settings.replay_power_opt_active = *power_opts;
    852                 }
    853         }
    854 
    855         /* Activate or deactivate Replay */
    856         if (allow_active && link->replay_settings.replay_allow_active != *allow_active) {
    857                 // TODO: Handle mux change case if force_static is set
    858                 // If force_static is set, just change the replay_allow_active state directly
    859                 if (replay != NULL && link->replay_settings.replay_feature_enabled)
    860                         replay->funcs->replay_enable(replay, *allow_active, wait, panel_inst);
    861                 link->replay_settings.replay_allow_active = *allow_active;
    862         }
    863 
    864         return true;
    865 }

regards,
dan carpenter


More information about the amd-gfx mailing list