CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Maxime Ripard <[email protected]>
tree: git://git.kraxel.org/linux drm-misc-next head: e769a3504e273309c9fe4a417d427c8dbff4cf1c commit: 595dcf4eb859d043de9919f50d44272304e75422 [3/7] drm/vc4: hdmi: Move clock calculation into its own function :::::: branch date: 8 days ago :::::: commit date: 8 days ago config: arm-randconfig-c002-20220331 (https://download.01.org/0day-ci/archive/20220401/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 0f6d9501cf49ce02937099350d08f20c4af86f3d) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi git remote add kraxel git://git.kraxel.org/linux git fetch --no-tags kraxel drm-misc-next git checkout 595dcf4eb859d043de9919f50d44272304e75422 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ include/linux/spinlock.h:264:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:69:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:31: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:31:27: note: expanded from macro '__LOCK' do { preempt_disable(); ___LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:28:3: note: expanded from macro '___LOCK' do { __acquire(lock); (void)(lock); } while (0) ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1205:3: note: Loop condition is false. Exiting loop spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); ^ include/linux/spinlock.h:379:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:264:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:69:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:31: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ include/linux/spinlock_api_up.h:31:3: note: expanded from macro '__LOCK' do { preempt_disable(); ___LOCK(lock); } while (0) ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1205:3: note: Loop condition is false. Exiting loop spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); ^ include/linux/spinlock.h:379:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:264:3: note: expanded from macro 'raw_spin_lock_irqsave' _raw_spin_lock_irqsave(lock, flags); \ ^ include/linux/spinlock_api_up.h:69:45: note: expanded from macro '_raw_spin_lock_irqsave' #define _raw_spin_lock_irqsave(lock, flags) __LOCK_IRQSAVE(lock, flags) ^ include/linux/spinlock_api_up.h:40:3: note: expanded from macro '__LOCK_IRQSAVE' do { local_irq_save(flags); __LOCK(lock); } while (0) ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1205:3: note: Loop condition is false. Exiting loop spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); ^ include/linux/spinlock.h:379:2: note: expanded from macro 'spin_lock_irqsave' raw_spin_lock_irqsave(spinlock_check(lock), flags); \ ^ include/linux/spinlock.h:262:2: note: expanded from macro 'raw_spin_lock_irqsave' do { \ ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1205:3: note: Loop condition is false. Exiting loop spin_lock_irqsave(&vc4_hdmi->hw_lock, flags); ^ include/linux/spinlock.h:377:43: note: expanded from macro 'spin_lock_irqsave' #define spin_lock_irqsave(lock, flags) \ ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1207:11: note: Assuming the condition is false WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & ^ include/asm-generic/bug.h:121:25: note: expanded from macro 'WARN_ON' int __ret_warn_on = !!(condition); \ ^~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:1207:3: note: Taking false branch WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) & ^ include/asm-generic/bug.h:122:2: note: expanded from macro 'WARN_ON' if (unlikely(__ret_warn_on)) \ ^ drivers/gpu/drm/vc4/vc4_hdmi.c:1218:3: note: Calling 'vc4_hdmi_set_infoframes' vc4_hdmi_set_infoframes(encoder); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:570:2: note: Loop condition is false. Exiting loop lockdep_assert_held(&vc4_hdmi->mutex); ^ include/linux/lockdep.h:411:34: note: expanded from macro 'lockdep_assert_held' #define lockdep_assert_held(l) do { (void)(l); } while (0) ^ drivers/gpu/drm/vc4/vc4_hdmi.c:578:6: note: Assuming field 'streaming' is true if (vc4_hdmi->audio.streaming) ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:578:2: note: Taking true branch if (vc4_hdmi->audio.streaming) ^ drivers/gpu/drm/vc4/vc4_hdmi.c:579:3: note: Calling 'vc4_hdmi_set_audio_infoframe' vc4_hdmi_set_audio_infoframe(encoder); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:542:2: note: Calling 'vc4_hdmi_write_infoframe' vc4_hdmi_write_infoframe(encoder, &frame); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:437:34: note: The left operand of '-' is a garbage value u32 packet_id = frame->any.type - 0x80; ~~~~~~~~~~~~~~~ ^ >> drivers/gpu/drm/vc4/vc4_hdmi.c:1323:3: warning: Value stored to >> 'tmds_char_rate' is never read [clang-analyzer-deadcode.DeadStores] tmds_char_rate = mode->clock * 1000; ^ ~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/vc4/vc4_hdmi.c:1323:3: note: Value stored to 'tmds_char_rate' is never read tmds_char_rate = mode->clock * 1000; ^ ~~~~~~~~~~~~~~~~~~ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:88:44: warning: The left operand of '-' is a garbage value [clang-analyzer-core.UndefinedBinaryOperatorResult] return ((sublinks & 1) ? sor[0] : sor[1]) - 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:72:2: note: Loop condition is true. Entering loop body for (*link = 0, m = __ffs(outp->info.or) * 2, s = 0; s < 2; m++, s++) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:73:7: note: Assuming the condition is false if (sublinks & BIT(s)) { ^~~~~~~~~~~~~~~~~ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:73:3: note: Taking false branch if (sublinks & BIT(s)) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:72:2: note: Loop condition is true. Entering loop body for (*link = 0, m = __ffs(outp->info.or) * 2, s = 0; s < 2; m++, s++) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:73:7: note: Assuming the condition is false if (sublinks & BIT(s)) { ^~~~~~~~~~~~~~~~~ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:73:3: note: Taking false branch if (sublinks & BIT(s)) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:72:2: note: Loop condition is false. Execution continues on line 83 for (*link = 0, m = __ffs(outp->info.or) * 2, s = 0; s < 2; m++, s++) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:83:6: note: 'sublinks' is not equal to 3 if (sublinks == 3) { ^~~~~~~~ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:83:2: note: Taking false branch if (sublinks == 3) { ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:88:11: note: Assuming the condition is false return ((sublinks & 1) ? sor[0] : sor[1]) - 1; ^~~~~~~~~~~~ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:88:10: note: '?' condition is false return ((sublinks & 1) ? sor[0] : sor[1]) - 1; ^ drivers/gpu/drm/nouveau/nvkm/engine/disp/sorgm200.c:88:44: note: The left operand of '-' is a garbage value return ((sublinks & 1) ? sor[0] : sor[1]) - 1; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 2 warnings generated. Suppressed 2 warnings (2 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 7 warnings generated. sound/pci/maestro3.c:1851:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(pcm->name, chip->card->driver); ^~~~~~ sound/pci/maestro3.c:1851:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(pcm->name, chip->card->driver); ^~~~~~ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 21 warnings generated. sound/pci/ac97/ac97_codec.c:1067:3: warning: Value stored to 'val' is never read [clang-analyzer-deadcode.DeadStores] val = snd_ac97_read(ac97, reg); ^ ~~~~~~~~~~~~~~~~~~~~~~~~ sound/pci/ac97/ac97_codec.c:1067:3: note: Value stored to 'val' is never read val = snd_ac97_read(ac97, reg); ^ ~~~~~~~~~~~~~~~~~~~~~~~~ sound/pci/ac97/ac97_codec.c:1104:3: warning: Value stored to 'val' is never read [clang-analyzer-deadcode.DeadStores] val = snd_ac97_read(ac97, reg); ^ ~~~~~~~~~~~~~~~~~~~~~~~~ sound/pci/ac97/ac97_codec.c:1104:3: note: Value stored to 'val' is never read val = snd_ac97_read(ac97, reg); ^ ~~~~~~~~~~~~~~~~~~~~~~~~ sound/pci/ac97/ac97_codec.c:1856:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(name, pid->name); ^~~~~~ sound/pci/ac97/ac97_codec.c:1856:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(name, pid->name); ^~~~~~ sound/pci/ac97/ac97_codec.c:1865:3: warning: Call to function 'strcat' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcat'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcat(name, " "); vim +/tmds_char_rate +1323 drivers/gpu/drm/vc4/vc4_hdmi.c 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1295 63495f6b4aede2 Maxime Ripard 2020-10-29 1296 static int vc4_hdmi_encoder_atomic_check(struct drm_encoder *encoder, 63495f6b4aede2 Maxime Ripard 2020-10-29 1297 struct drm_crtc_state *crtc_state, 63495f6b4aede2 Maxime Ripard 2020-10-29 1298 struct drm_connector_state *conn_state) 63495f6b4aede2 Maxime Ripard 2020-10-29 1299 { f623746f74721b Maxime Ripard 2020-12-15 1300 struct vc4_hdmi_connector_state *vc4_state = conn_state_to_vc4_hdmi_conn_state(conn_state); 63495f6b4aede2 Maxime Ripard 2020-10-29 1301 struct drm_display_mode *mode = &crtc_state->adjusted_mode; 63495f6b4aede2 Maxime Ripard 2020-10-29 1302 struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder); 6135ee07702781 Maxime Ripard 2022-02-22 1303 unsigned long long tmds_char_rate = mode->clock * 1000; 6135ee07702781 Maxime Ripard 2022-02-22 1304 unsigned long long tmds_bit_rate; 595dcf4eb859d0 Maxime Ripard 2022-02-22 1305 int ret; 63495f6b4aede2 Maxime Ripard 2020-10-29 1306 57fb32e632be4d Maxime Ripard 2020-10-29 1307 if (vc4_hdmi->variant->unsupported_odd_h_timings && 57fb32e632be4d Maxime Ripard 2020-10-29 1308 ((mode->hdisplay % 2) || (mode->hsync_start % 2) || 57fb32e632be4d Maxime Ripard 2020-10-29 1309 (mode->hsync_end % 2) || (mode->htotal % 2))) 57fb32e632be4d Maxime Ripard 2020-10-29 1310 return -EINVAL; 57fb32e632be4d Maxime Ripard 2020-10-29 1311 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1312 /* 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1313 * The 1440p@60 pixel rate is in the same range than the first 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1314 * WiFi channel (between 2.4GHz and 2.422GHz with 22MHz 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1315 * bandwidth). Slightly lower the frequency to bring it out of 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1316 * the WiFi range. 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1317 */ 6135ee07702781 Maxime Ripard 2022-02-22 1318 tmds_bit_rate = tmds_char_rate * 10; 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1319 if (vc4_hdmi->disable_wifi_frequencies && 6135ee07702781 Maxime Ripard 2022-02-22 1320 (tmds_bit_rate >= WIFI_2_4GHz_CH1_MIN_FREQ && 6135ee07702781 Maxime Ripard 2022-02-22 1321 tmds_bit_rate <= WIFI_2_4GHz_CH1_MAX_FREQ)) { 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1322 mode->clock = 238560; 6135ee07702781 Maxime Ripard 2022-02-22 @1323 tmds_char_rate = mode->clock * 1000; 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1324 } 9fa1d7e60ad5ad Maxime Ripard 2020-10-29 1325 595dcf4eb859d0 Maxime Ripard 2022-02-22 1326 ret = vc4_hdmi_encoder_compute_clock(vc4_hdmi, vc4_state, mode, 595dcf4eb859d0 Maxime Ripard 2022-02-22 1327 conn_state->max_bpc); 595dcf4eb859d0 Maxime Ripard 2022-02-22 1328 if (ret) 595dcf4eb859d0 Maxime Ripard 2022-02-22 1329 return ret; f623746f74721b Maxime Ripard 2020-12-15 1330 63495f6b4aede2 Maxime Ripard 2020-10-29 1331 return 0; 63495f6b4aede2 Maxime Ripard 2020-10-29 1332 } 63495f6b4aede2 Maxime Ripard 2020-10-29 1333 :::::: The code at line 1323 was first introduced by commit :::::: 6135ee07702781cd8206bcb1c202c4630d6e3c9c drm/vc4: hdmi: Rename pixel_rate variable :::::: TO: Maxime Ripard <[email protected]> :::::: CC: Maxime Ripard <[email protected]> -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
