CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: Dave Stevenson <[email protected]> CC: Dom Cobley <[email protected]>
tree: https://github.com/l1k/linux smsc95xx_5.17 head: 240f56c27361c195cd502d95aba51c6b8e5b808c commit: 6f6042987b769f796264e6a449dc80555aa7f5b8 [642/888] drm/bridge: Introduce pre_enable_upstream_first to alter bridge init order :::::: branch date: 23 hours ago :::::: commit date: 3 weeks ago config: riscv-randconfig-c006-20220408 (https://download.01.org/0day-ci/archive/20220409/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 893e1c18b98d8bbc7b8d7d22cc2c348f65c72ad9) 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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://github.com/l1k/linux/commit/6f6042987b769f796264e6a449dc80555aa7f5b8 git remote add l1k https://github.com/l1k/linux git fetch --no-tags l1k smsc95xx_5.17 git checkout 6f6042987b769f796264e6a449dc80555aa7f5b8 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv 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 >>) while (!list_empty(&map->debugfs_off_cache)) { ^ drivers/base/regmap/regmap-debugfs.c:75:3: note: Calling 'list_del' list_del(&c->list); ^~~~~~~~~~~~~~~~~~ include/linux/list.h:148:2: note: Calling '__list_del_entry' __list_del_entry(entry); ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:2: note: Taking false branch if (!__list_del_entry_valid(entry)) ^ include/linux/list.h:137:13: note: Use of memory after it is freed __list_del(entry->prev, entry->next); ^~~~~~~~~~~ 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. 3 warnings generated. drivers/base/regmap/regmap-mmio.c:52:3: warning: Value stored to 'min_stride' is never read [clang-analyzer-deadcode.DeadStores] min_stride = 0; ^ ~ drivers/base/regmap/regmap-mmio.c:52:3: note: Value stored to 'min_stride' is never read min_stride = 0; ^ ~ 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. 3 warnings generated. Suppressed 3 warnings (3 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. drivers/usb/gadget/udc/snps_udc_core.c:439:2: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = desc->bEndpointAddress; ^ ~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/snps_udc_core.c:439:2: note: Value stored to 'tmp' is never read tmp = desc->bEndpointAddress; ^ ~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/snps_udc_core.c:2117:5: warning: Value stored to 'req' is never read [clang-analyzer-deadcode.DeadStores] req = list_entry(ep->queue.next, ^ drivers/usb/gadget/udc/snps_udc_core.c:2117:5: note: Value stored to 'req' is never read drivers/usb/gadget/udc/snps_udc_core.c:2613:4: warning: Value stored to 'count' is never read [clang-analyzer-deadcode.DeadStores] count = AMD_GETBITS(count, UDC_EPSTS_RX_PKT_SIZE); ^ drivers/usb/gadget/udc/snps_udc_core.c:2613:4: note: Value stored to 'count' is never read drivers/usb/gadget/udc/snps_udc_core.c:2797:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = dev->driver->setup(&dev->gadget, &setup_data.request); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/snps_udc_core.c:2797:3: note: Value stored to 'tmp' is never read tmp = dev->driver->setup(&dev->gadget, &setup_data.request); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/snps_udc_core.c:2857:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = dev->driver->setup(&dev->gadget, &setup_data.request); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/snps_udc_core.c:2857:3: note: Value stored to 'tmp' is never read tmp = dev->driver->setup(&dev->gadget, &setup_data.request); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 3 warnings generated. drivers/iio/chemical/bme680_core.c:741:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/chemical/bme680_core.c:741:2: note: Value stored to 'ret' is never read ret = regmap_read(data->regmap, BME680_REG_MEAS_STAT_0, &check); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 4 warnings generated. drivers/misc/enclosure.c:186: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, "enclosure_device:"); ^~~~~~ drivers/misc/enclosure.c:186: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, "enclosure_device:"); ^~~~~~ drivers/misc/enclosure.c:187:2: 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, dev_name(&cdev->cdev)); ^~~~~~ drivers/misc/enclosure.c:187:2: note: 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 strcat(name, dev_name(&cdev->cdev)); ^~~~~~ 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. 3 warnings generated. >> drivers/gpu/drm/drm_bridge.c:828:9: warning: Assigned value is garbage or >> undefined [clang-analyzer-core.uninitialized.Assign] iter = limit; ^ drivers/gpu/drm/drm_bridge.c:583:2: note: Calling 'drm_atomic_bridge_chain_pre_enable' drm_atomic_bridge_chain_pre_enable(bridge, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:783:35: note: 'limit' declared without an initial value struct drm_bridge *iter, *next, *limit; ^~~~~ drivers/gpu/drm/drm_bridge.c:785:6: note: Assuming 'bridge' is non-null if (!bridge) ^~~~~~~ drivers/gpu/drm/drm_bridge.c:785:2: note: Taking false branch if (!bridge) ^ drivers/gpu/drm/drm_bridge.c:790:2: note: Loop condition is true. Entering loop body list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) { ^ include/linux/list.h:649:2: note: expanded from macro 'list_for_each_entry_reverse' for (pos = list_last_entry(head, typeof(*pos), member); \ ^ drivers/gpu/drm/drm_bridge.c:791:7: note: Assuming field 'pre_enable_upstream_first' is false if (iter->pre_enable_upstream_first) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:791:3: note: Taking false branch if (iter->pre_enable_upstream_first) { ^ drivers/gpu/drm/drm_bridge.c:823:3: note: Calling 'drm_atomic_bridge_call_pre_enable' drm_atomic_bridge_call_pre_enable(iter, old_state); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:748:6: note: 'old_state' is null if (old_state && bridge->funcs->atomic_pre_enable) { ^~~~~~~~~ drivers/gpu/drm/drm_bridge.c:748:16: note: Left side of '&&' is false if (old_state && bridge->funcs->atomic_pre_enable) { ^ drivers/gpu/drm/drm_bridge.c:758:13: note: Assuming field 'pre_enable' is non-null } else if (bridge->funcs->pre_enable) { ^~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:758:9: note: Taking true branch } else if (bridge->funcs->pre_enable) { ^ drivers/gpu/drm/drm_bridge.c:759:3: note: Value assigned to field 'pre_enable_upstream_first', which participates in a condition later bridge->funcs->pre_enable(bridge); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:823:3: note: Returning from 'drm_atomic_bridge_call_pre_enable' drm_atomic_bridge_call_pre_enable(iter, old_state); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:825:7: note: Assuming field 'pre_enable_upstream_first' is true if (iter->pre_enable_upstream_first) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_bridge.c:825:3: note: Taking true branch if (iter->pre_enable_upstream_first) ^ drivers/gpu/drm/drm_bridge.c:828:9: note: Assigned value is garbage or undefined iter = limit; ^ ~~~~~ 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. 3 warnings generated. drivers/iio/chemical/scd30_i2c.c:104:10: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] *rsp++ = buf[i]; ~~~~~~~^~~~~~~~ drivers/iio/chemical/scd30_i2c.c:70:2: note: 'rsp' initialized here char *rsp = response; ^~~~~~~~~ drivers/iio/chemical/scd30_i2c.c:77:6: note: Assuming 'rsp' is null if (rsp) { ^~~ drivers/iio/chemical/scd30_i2c.c:77:2: note: Taking false branch if (rsp) { ^ drivers/iio/chemical/scd30_i2c.c:88:8: note: Assuming 'cmd' is equal to CMD_STOP_MEAS if ((cmd == CMD_STOP_MEAS) || (cmd == CMD_RESET)) ^~~~~~~~~~~~~~~~~~~~ drivers/iio/chemical/scd30_i2c.c:88:30: note: Left side of '||' is true if ((cmd == CMD_STOP_MEAS) || (cmd == CMD_RESET)) ^ drivers/iio/chemical/scd30_i2c.c:92:8: note: Calling 'scd30_i2c_xfer' ret = scd30_i2c_xfer(state, buf, i, buf, size); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/chemical/scd30_i2c.c:49:6: note: Assuming 'ret' is >= 0 if (ret < 0) ^~~~~~~ drivers/iio/chemical/scd30_i2c.c:49:2: note: Taking false branch if (ret < 0) ^ drivers/iio/chemical/scd30_i2c.c:51:6: note: Assuming 'ret' is equal to 'txsize' if (ret != txsize) ^~~~~~~~~~~~~ drivers/iio/chemical/scd30_i2c.c:51:2: note: Taking false branch if (ret != txsize) ^ drivers/iio/chemical/scd30_i2c.c:54:7: note: 'rxbuf' is non-null if (!rxbuf) ^~~~~ drivers/iio/chemical/scd30_i2c.c:54:2: note: Taking false branch if (!rxbuf) ^ drivers/iio/chemical/scd30_i2c.c:58:6: note: Assuming 'ret' is >= 0 if (ret < 0) vim +828 drivers/gpu/drm/drm_bridge.c 5ade071ba13e3bb Sean Paul 2019-06-11 762 5ade071ba13e3bb Sean Paul 2019-06-11 763 /** ea099adfdf4bf35 Boris Brezillon 2019-12-03 764 * drm_atomic_bridge_chain_pre_enable - prepares for enabling all bridges in ea099adfdf4bf35 Boris Brezillon 2019-12-03 765 * the encoder chain 5ade071ba13e3bb Sean Paul 2019-06-11 766 * @bridge: bridge control structure f3fdbc721b8bc99 Boris Brezillon 2019-12-03 767 * @old_state: old atomic state 5ade071ba13e3bb Sean Paul 2019-06-11 768 * 5ade071ba13e3bb Sean Paul 2019-06-11 769 * Calls &drm_bridge_funcs.atomic_pre_enable (falls back on 5ade071ba13e3bb Sean Paul 2019-06-11 770 * &drm_bridge_funcs.pre_enable) op for all the bridges in the encoder chain, 5ade071ba13e3bb Sean Paul 2019-06-11 771 * starting from the last bridge to the first. These are called before calling 5ade071ba13e3bb Sean Paul 2019-06-11 772 * &drm_encoder_helper_funcs.atomic_enable 5ade071ba13e3bb Sean Paul 2019-06-11 773 * 6f6042987b769f7 Dave Stevenson 2021-12-16 774 * If a bridge sets @pre_enable_upstream_first, then the pre_enable for the 6f6042987b769f7 Dave Stevenson 2021-12-16 775 * upstream bridge will be called before pre_enable of this bridge. 6f6042987b769f7 Dave Stevenson 2021-12-16 776 * 5ade071ba13e3bb Sean Paul 2019-06-11 777 * Note: the bridge passed should be the one closest to the encoder 5ade071ba13e3bb Sean Paul 2019-06-11 778 */ ea099adfdf4bf35 Boris Brezillon 2019-12-03 779 void drm_atomic_bridge_chain_pre_enable(struct drm_bridge *bridge, f3fdbc721b8bc99 Boris Brezillon 2019-12-03 780 struct drm_atomic_state *old_state) 5ade071ba13e3bb Sean Paul 2019-06-11 781 { 05193dc38197021 Boris Brezillon 2019-12-03 782 struct drm_encoder *encoder; 6f6042987b769f7 Dave Stevenson 2021-12-16 783 struct drm_bridge *iter, *next, *limit; 05193dc38197021 Boris Brezillon 2019-12-03 784 5ade071ba13e3bb Sean Paul 2019-06-11 785 if (!bridge) 5ade071ba13e3bb Sean Paul 2019-06-11 786 return; 5ade071ba13e3bb Sean Paul 2019-06-11 787 05193dc38197021 Boris Brezillon 2019-12-03 788 encoder = bridge->encoder; 6f6042987b769f7 Dave Stevenson 2021-12-16 789 05193dc38197021 Boris Brezillon 2019-12-03 790 list_for_each_entry_reverse(iter, &encoder->bridge_chain, chain_node) { 6f6042987b769f7 Dave Stevenson 2021-12-16 791 if (iter->pre_enable_upstream_first) { 6f6042987b769f7 Dave Stevenson 2021-12-16 792 next = iter; 6f6042987b769f7 Dave Stevenson 2021-12-16 793 limit = bridge; 6f6042987b769f7 Dave Stevenson 2021-12-16 794 list_for_each_entry_from_reverse(next, 6f6042987b769f7 Dave Stevenson 2021-12-16 795 &encoder->bridge_chain, 6f6042987b769f7 Dave Stevenson 2021-12-16 796 chain_node) { 6f6042987b769f7 Dave Stevenson 2021-12-16 797 if (next == bridge) 6f6042987b769f7 Dave Stevenson 2021-12-16 798 break; 41cf57124e0245e Boris Brezillon 2020-01-28 799 6f6042987b769f7 Dave Stevenson 2021-12-16 800 if (!next->pre_enable_upstream_first) { 6f6042987b769f7 Dave Stevenson 2021-12-16 801 /* Found first bridge that does NOT 6f6042987b769f7 Dave Stevenson 2021-12-16 802 * request upstream to be enabled first 6f6042987b769f7 Dave Stevenson 2021-12-16 803 */ 6f6042987b769f7 Dave Stevenson 2021-12-16 804 limit = list_prev_entry(next, chain_node); 6f6042987b769f7 Dave Stevenson 2021-12-16 805 break; 6f6042987b769f7 Dave Stevenson 2021-12-16 806 } 6f6042987b769f7 Dave Stevenson 2021-12-16 807 } 41cf57124e0245e Boris Brezillon 2020-01-28 808 6f6042987b769f7 Dave Stevenson 2021-12-16 809 list_for_each_entry_from(next, &encoder->bridge_chain, chain_node) { 6f6042987b769f7 Dave Stevenson 2021-12-16 810 /* Call requested upstream bridge pre_enable 6f6042987b769f7 Dave Stevenson 2021-12-16 811 * in order. 6f6042987b769f7 Dave Stevenson 2021-12-16 812 */ 6f6042987b769f7 Dave Stevenson 2021-12-16 813 if (next == iter) 6f6042987b769f7 Dave Stevenson 2021-12-16 814 /* At the first bridgge to request upstream 6f6042987b769f7 Dave Stevenson 2021-12-16 815 * bridges called first. 6f6042987b769f7 Dave Stevenson 2021-12-16 816 */ 6f6042987b769f7 Dave Stevenson 2021-12-16 817 break; 6f6042987b769f7 Dave Stevenson 2021-12-16 818 6f6042987b769f7 Dave Stevenson 2021-12-16 819 drm_atomic_bridge_call_pre_enable(next, old_state); 6f6042987b769f7 Dave Stevenson 2021-12-16 820 } 41cf57124e0245e Boris Brezillon 2020-01-28 821 } 5ade071ba13e3bb Sean Paul 2019-06-11 822 6f6042987b769f7 Dave Stevenson 2021-12-16 823 drm_atomic_bridge_call_pre_enable(iter, old_state); 6f6042987b769f7 Dave Stevenson 2021-12-16 824 6f6042987b769f7 Dave Stevenson 2021-12-16 825 if (iter->pre_enable_upstream_first) 6f6042987b769f7 Dave Stevenson 2021-12-16 826 /* Jump all bridges that we have already pre_enabled 6f6042987b769f7 Dave Stevenson 2021-12-16 827 */ 6f6042987b769f7 Dave Stevenson 2021-12-16 @828 iter = limit; 6f6042987b769f7 Dave Stevenson 2021-12-16 829 05193dc38197021 Boris Brezillon 2019-12-03 830 if (iter == bridge) 05193dc38197021 Boris Brezillon 2019-12-03 831 break; 05193dc38197021 Boris Brezillon 2019-12-03 832 } 5ade071ba13e3bb Sean Paul 2019-06-11 833 } ea099adfdf4bf35 Boris Brezillon 2019-12-03 834 EXPORT_SYMBOL(drm_atomic_bridge_chain_pre_enable); 5ade071ba13e3bb Sean Paul 2019-06-11 835 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
