[bug report] drm/amd/display: refactor destructive verify link cap sequence

Dan Carpenter dan.carpenter at oracle.com
Wed Feb 2 17:52:53 UTC 2022


Hello Wenjing Liu,

The patch 1a206273c322: "drm/amd/display: refactor destructive verify
link cap sequence" from Jan 28, 2022, leads to the following Smatch
static checker warning:

	drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_link_dp.c:3248 dp_verify_link_cap()
	error: uninitialized symbol 'status'.

drivers/gpu/drm/amd/amdgpu/../display/dc/core/dc_link_dp.c
    3192 static bool dp_verify_link_cap(
    3193         struct dc_link *link,
    3194         struct dc_link_settings *known_limit_link_setting,
    3195         int *fail_count)
    3196 {
    3197         struct dc_link_settings cur_link_settings = {0};
    3198         struct dc_link_settings initial_link_settings = *known_limit_link_setting;
    3199         bool success = false;
    3200         bool skip_video_pattern;
    3201         enum clock_source_id dp_cs_id = get_clock_source_id(link);
    3202         enum link_training_result status;
    3203         union hpd_irq_data irq_data;
    3204         struct link_resource link_res;
    3205 
    3206         memset(&irq_data, 0, sizeof(irq_data));
    3207         cur_link_settings = initial_link_settings;
    3208 
    3209         /* Grant extended timeout request */
    3210         if ((link->lttpr_mode == LTTPR_MODE_NON_TRANSPARENT) && (link->dpcd_caps.lttpr_caps.max_ext_timeout > 0)) {
    3211                 uint8_t grant = link->dpcd_caps.lttpr_caps.max_ext_timeout & 0x80;
    3212 
    3213                 core_link_write_dpcd(link, DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT, &grant, sizeof(grant));
    3214         }
    3215 
    3216         do {
    3217                 if (!get_temp_dp_link_res(link, &link_res, &cur_link_settings))
    3218                         continue;

"status" is not set on this continure path.

    3219 
    3220                 skip_video_pattern = cur_link_settings.link_rate != LINK_RATE_LOW;
    3221                 dp_enable_link_phy(
    3222                                 link,
    3223                                 &link_res,
    3224                                 link->connector_signal,
    3225                                 dp_cs_id,
    3226                                 &cur_link_settings);
    3227 
    3228                 status = dc_link_dp_perform_link_training(
    3229                                 link,
    3230                                 &link_res,
    3231                                 &cur_link_settings,
    3232                                 skip_video_pattern);
    3233 
    3234                 if (status == LINK_TRAINING_SUCCESS) {
    3235                         success = true;
    3236                         udelay(1000);
    3237                         if (read_hpd_rx_irq_data(link, &irq_data) == DC_OK &&
    3238                                         hpd_rx_irq_check_link_loss_status(
    3239                                                         link,
    3240                                                         &irq_data))
    3241                                 (*fail_count)++;
    3242 
    3243                 } else {
    3244                         (*fail_count)++;
    3245                 }
    3246                 dp_disable_link_phy(link, &link_res, link->connector_signal);
    3247         } while (!success && decide_fallback_link_setting(link,
--> 3248                         initial_link_settings, &cur_link_settings, status));
                                                                            ^^^^^^
Uninitialized variable

    3249 
    3250         link->verified_link_cap = success ?
    3251                         cur_link_settings : fail_safe_link_settings;
    3252         return success;
    3253 }

regards,
dan carpenter


More information about the amd-gfx mailing list