drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.c:365 dc_link_construct_phy() warn: variable dereferenced before check 'link->link_enc' (see line 362)

From: Dan Carpenter
Date: Sun Feb 26 2023 - 23:36:00 EST


tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 2fcd07b7ccd5fd10b2120d298363e4e6c53ccf9c
commit: 54618888d1ea7a26f8bccfb89e3c2420350c8047 drm/amd/display: break down dc_link.c
config: m68k-randconfig-m031-20230226 (https://download.01.org/0day-ci/archive/20230226/202302261837.dKavRZA5-lkp@xxxxxxxxx/config)
compiler: m68k-linux-gcc (GCC) 12.1.0

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Reported-by: Dan Carpenter <error27@xxxxxxxxx>
| Link: https://lore.kernel.org/r/202302261837.dKavRZA5-lkp@xxxxxxxxx/

New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.c:365 dc_link_construct_phy() warn: variable dereferenced before check 'link->link_enc' (see line 362)
drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_dpms.c:2307 link_set_dpms_on() warn: if statement not indented

Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.c:145 get_ddc_line() warn: inconsistent indenting
drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.c:201 dc_link_construct_phy() warn: inconsistent indenting

vim +365 drivers/gpu/drm/amd/amdgpu/../display/dc/link/link_factory.c

54618888d1ea7a Wenjing Liu 2023-01-18 348 enc_init_data.ctx = dc_ctx;
54618888d1ea7a Wenjing Liu 2023-01-18 349 bp_funcs->get_src_obj(dc_ctx->dc_bios, link->link_id, 0,
54618888d1ea7a Wenjing Liu 2023-01-18 350 &enc_init_data.encoder);
54618888d1ea7a Wenjing Liu 2023-01-18 351 enc_init_data.connector = link->link_id;
54618888d1ea7a Wenjing Liu 2023-01-18 352 enc_init_data.channel = get_ddc_line(link);
54618888d1ea7a Wenjing Liu 2023-01-18 353 enc_init_data.hpd_source = get_hpd_line(link);
54618888d1ea7a Wenjing Liu 2023-01-18 354
54618888d1ea7a Wenjing Liu 2023-01-18 355 link->hpd_src = enc_init_data.hpd_source;
54618888d1ea7a Wenjing Liu 2023-01-18 356
54618888d1ea7a Wenjing Liu 2023-01-18 357 enc_init_data.transmitter =
54618888d1ea7a Wenjing Liu 2023-01-18 358 translate_encoder_to_transmitter(enc_init_data.encoder);
54618888d1ea7a Wenjing Liu 2023-01-18 359 link->link_enc =
54618888d1ea7a Wenjing Liu 2023-01-18 360 link->dc->res_pool->funcs->link_enc_create(dc_ctx, &enc_init_data);
54618888d1ea7a Wenjing Liu 2023-01-18 361
54618888d1ea7a Wenjing Liu 2023-01-18 @362 DC_LOG_DC("BIOS object table - DP_IS_USB_C: %d", link->link_enc->features.flags.bits.DP_IS_USB_C);
^^^^^^^^^^^^^^^^

54618888d1ea7a Wenjing Liu 2023-01-18 363 DC_LOG_DC("BIOS object table - IS_DP2_CAPABLE: %d", link->link_enc->features.flags.bits.IS_DP2_CAPABLE);
^^^^^^^^^^^^^^^^

54618888d1ea7a Wenjing Liu 2023-01-18 364
54618888d1ea7a Wenjing Liu 2023-01-18 @365 if (!link->link_enc) {
^^^^^^^^^^^^^^
Too late.

54618888d1ea7a Wenjing Liu 2023-01-18 366 DC_ERROR("Failed to create link encoder!\n");
54618888d1ea7a Wenjing Liu 2023-01-18 367 goto link_enc_create_fail;
54618888d1ea7a Wenjing Liu 2023-01-18 368 }
54618888d1ea7a Wenjing Liu 2023-01-18 369
54618888d1ea7a Wenjing Liu 2023-01-18 370 /* Update link encoder tracking variables. These are used for the dynamic
54618888d1ea7a Wenjing Liu 2023-01-18 371 * assignment of link encoders to streams.
54618888d1ea7a Wenjing Liu 2023-01-18 372 */
54618888d1ea7a Wenjing Liu 2023-01-18 373 link->eng_id = link->link_enc->preferred_engine;
54618888d1ea7a Wenjing Liu 2023-01-18 374 link->dc->res_pool->link_encoders[link->eng_id - ENGINE_ID_DIGA] = link->link_enc;
54618888d1ea7a Wenjing Liu 2023-01-18 375 link->dc->res_pool->dig_link_enc_count++;
54618888d1ea7a Wenjing Liu 2023-01-18 376
54618888d1ea7a Wenjing Liu 2023-01-18 377 link->link_enc_hw_inst = link->link_enc->transmitter;

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests