:::::: :::::: Manual check reason: "low confidence static check warning: drivers/firmware/arm_scmi/driver.c:812:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores]" :::::: BCC: lkp@intel.com CC: llvm@lists.linux.dev CC: oe-kbuild-all@lists.linux.dev CC: linux-kernel@vger.kernel.org TO: Cristian Marussi CC: Sudeep Holla Hi Cristian, FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant. tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 950a9f564aeade8f7b263bb8e9646c4c13ffd424 commit: 5a731aebd31bf840a93deae12bdfd831513e7211 firmware: arm_scmi: Refactor message response path date: 11 months ago :::::: branch date: 12 hours ago :::::: commit date: 11 months ago config: arm-randconfig-c002-20221118 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project bbe6bd724a6335e497c7edaed191d37a828d0390) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a731aebd31bf840a93deae12bdfd831513e7211 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 5a731aebd31bf840a93deae12bdfd831513e7211 # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot clang_analyzer warnings: (new ones prefixed by >>) Suppressed 16 warnings (16 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. 15 warnings generated. Suppressed 15 warnings (15 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 15 warnings generated. Suppressed 15 warnings (15 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 15 warnings generated. Suppressed 15 warnings (15 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 1 warning 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); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 16 warnings generated. Suppressed 16 warnings (16 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. 15 warnings generated. Suppressed 15 warnings (15 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 16 warnings generated. drivers/iio/gyro/adis16080.c:43:8: warning: Excessive padding in 'struct adis16080_state' (110 padding bytes, where 46 is optimal). Optimal fields order: buf, us, info, lock, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct adis16080_state { ~~~~~~~^~~~~~~~~~~~~~~~~ drivers/iio/gyro/adis16080.c:43:8: note: Excessive padding in 'struct adis16080_state' (110 padding bytes, where 46 is optimal). Optimal fields order: buf, us, info, lock, consider reordering the fields or adding explicit padding members struct adis16080_state { ~~~~~~~^~~~~~~~~~~~~~~~~ Suppressed 15 warnings (15 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. 16 warnings generated. drivers/iio/gyro/adis16130.c:41:8: warning: Excessive padding in 'struct adis16130_state' (112 padding bytes, where 48 is optimal). Optimal fields order: buf, us, buf_lock, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct adis16130_state { ~~~~~~~^~~~~~~~~~~~~~~~~ drivers/iio/gyro/adis16130.c:41:8: note: Excessive padding in 'struct adis16130_state' (112 padding bytes, where 48 is optimal). Optimal fields order: buf, us, buf_lock, consider reordering the fields or adding explicit padding members struct adis16130_state { ~~~~~~~^~~~~~~~~~~~~~~~~ Suppressed 15 warnings (15 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. 16 warnings generated. drivers/iio/gyro/adxrs450.c:73:8: warning: Excessive padding in 'struct adxrs450_state' (108 padding bytes, where 44 is optimal). Optimal fields order: tx, us, rx, buf_lock, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct adxrs450_state { ~~~~~~~^~~~~~~~~~~~~~~~ drivers/iio/gyro/adxrs450.c:73:8: note: Excessive padding in 'struct adxrs450_state' (108 padding bytes, where 44 is optimal). Optimal fields order: tx, us, rx, buf_lock, consider reordering the fields or adding explicit padding members struct adxrs450_state { ~~~~~~~^~~~~~~~~~~~~~~~ Suppressed 15 warnings (15 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. 17 warnings generated. drivers/iio/gyro/fxas21002c_core.c:137:8: warning: Excessive padding in 'struct fxas21002c_data' (71 padding bytes, where 7 is optimal). Optimal fields order: buffer, timestamp, mode, prev_mode, regmap, dready_trig, irq, vdd, vddio, lock, regmap_fields, chip_id, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct fxas21002c_data { ~~~~~~~^~~~~~~~~~~~~~~~~ drivers/iio/gyro/fxas21002c_core.c:137:8: note: Excessive padding in 'struct fxas21002c_data' (71 padding bytes, where 7 is optimal). Optimal fields order: buffer, timestamp, mode, prev_mode, regmap, dready_trig, irq, vdd, vddio, lock, regmap_fields, chip_id, consider reordering the fields or adding explicit padding members struct fxas21002c_data { ~~~~~~~^~~~~~~~~~~~~~~~~ Suppressed 16 warnings (16 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. 16 warnings generated. Suppressed 16 warnings (16 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. 15 warnings generated. Suppressed 15 warnings (15 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. 16 warnings generated. Suppressed 16 warnings (16 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. 18 warnings generated. >> drivers/firmware/arm_scmi/driver.c:812:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/firmware/arm_scmi/driver.c:812:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/firmware/arm_scmi/driver.c:1818:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = idr_for_each(idr, info->desc->ops->chan_free, idr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/firmware/arm_scmi/driver.c:1818:2: note: Value stored to 'ret' is never read ret = idr_for_each(idr, info->desc->ops->chan_free, idr); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 16 warnings (16 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. 16 warnings generated. drivers/firmware/arm_scmi/notify.c:1425:2: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] scmi_put_handler(ni, hndl); ^ drivers/firmware/arm_scmi/notify.c:1443:2: note: Calling 'scmi_notifier_unregister' scmi_notifier_unregister(dres->handle, dres->proto_id, dres->evt_id, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/firmware/arm_scmi/notify.c:1398:6: note: Assuming 'ni' is non-null if (!ni) ^~~ drivers/firmware/arm_scmi/notify.c:1398:2: note: Taking false branch if (!ni) ^ drivers/firmware/arm_scmi/notify.c:1401:12: note: Taking false branch evt_key = MAKE_HASH_KEY(proto_id, evt_id, ^ drivers/firmware/arm_scmi/notify.c:108:3: note: expanded from macro 'MAKE_HASH_KEY' (FIELD_PREP(PROTO_ID_MASK, (p)) | \ ^ include/linux/bitfield.h:94:3: note: expanded from macro 'FIELD_PREP' __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \ ^ include/linux/bitfield.h:46:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:315:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/firmware/arm_scmi/notify.c:1401:12: note: Loop condition is false. Exiting loop evt_key = MAKE_HASH_KEY(proto_id, evt_id, ^ drivers/firmware/arm_scmi/notify.c:108:3: note: expanded from macro 'MAKE_HASH_KEY' (FIELD_PREP(PROTO_ID_MASK, (p)) | \ ^ include/linux/bitfield.h:94:3: note: expanded from macro 'FIELD_PREP' __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \ ^ include/linux/bitfield.h:46:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG(!__builtin_constant_p(_mask), \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:307:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/firmware/arm_scmi/notify.c:1401:12: note: Taking false branch evt_key = MAKE_HASH_KEY(proto_id, evt_id, ^ drivers/firmware/arm_scmi/notify.c:108:3: note: expanded from macro 'MAKE_HASH_KEY' (FIELD_PREP(PROTO_ID_MASK, (p)) | \ ^ include/linux/bitfield.h:94:3: note: expanded from macro 'FIELD_PREP' __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \ ^ include/linux/bitfield.h:48:3: note: expanded from macro '__BF_FIELD_CHECK' BUILD_BUG_ON_MSG((_mask) == 0, _pfx "mask is zero"); \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:335:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:323:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:315:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/firmware/arm_scmi/notify.c:1401:12: note: Loop condition is false. Exiting loop evt_key = MAKE_HASH_KEY(proto_id, evt_id, ^ drivers/firmware/arm_scmi/notify.c:108:3: note: expanded from macro 'MAKE_HASH_KEY' (FIELD_PREP(PROTO_ID_MASK, (p)) | \ ^ include/linux/bitfield.h:94:3: note: expanded from macro 'FIELD_PREP' __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \ vim +/dev +812 drivers/firmware/arm_scmi/driver.c 5a731aebd31bf8 Cristian Marussi 2021-11-29 795 aa4f886f3893f8 Sudeep Holla 2017-03-28 796 /** a4a20b0975dc7b Cristian Marussi 2021-03-16 797 * do_xfer() - Do one transfer aa4f886f3893f8 Sudeep Holla 2017-03-28 798 * a4a20b0975dc7b Cristian Marussi 2021-03-16 799 * @ph: Pointer to SCMI protocol handle aa4f886f3893f8 Sudeep Holla 2017-03-28 800 * @xfer: Transfer to initiate and wait for response aa4f886f3893f8 Sudeep Holla 2017-03-28 801 * aa4f886f3893f8 Sudeep Holla 2017-03-28 802 * Return: -ETIMEDOUT in case of no response, if transmit error, aa4f886f3893f8 Sudeep Holla 2017-03-28 803 * return corresponding error, else if all goes well, aa4f886f3893f8 Sudeep Holla 2017-03-28 804 * return 0. aa4f886f3893f8 Sudeep Holla 2017-03-28 805 */ a4a20b0975dc7b Cristian Marussi 2021-03-16 806 static int do_xfer(const struct scmi_protocol_handle *ph, a4a20b0975dc7b Cristian Marussi 2021-03-16 807 struct scmi_xfer *xfer) aa4f886f3893f8 Sudeep Holla 2017-03-28 808 { aa4f886f3893f8 Sudeep Holla 2017-03-28 809 int ret; a4a20b0975dc7b Cristian Marussi 2021-03-16 810 const struct scmi_protocol_instance *pi = ph_to_pi(ph); a4a20b0975dc7b Cristian Marussi 2021-03-16 811 struct scmi_info *info = handle_to_scmi_info(pi->handle); aa4f886f3893f8 Sudeep Holla 2017-03-28 @812 struct device *dev = info->dev; 907b6d14911db0 Sudeep Holla 2017-07-31 813 struct scmi_chan_info *cinfo; 907b6d14911db0 Sudeep Holla 2017-07-31 814 2930abcffd9f0b Cristian Marussi 2021-08-03 815 if (xfer->hdr.poll_completion && !info->desc->ops->poll_done) { 2930abcffd9f0b Cristian Marussi 2021-08-03 816 dev_warn_once(dev, 2930abcffd9f0b Cristian Marussi 2021-08-03 817 "Polling mode is not supported by transport.\n"); 2930abcffd9f0b Cristian Marussi 2021-08-03 818 return -EINVAL; 2930abcffd9f0b Cristian Marussi 2021-08-03 819 } 2930abcffd9f0b Cristian Marussi 2021-08-03 820 d211ddeb511af5 Cristian Marussi 2021-11-29 821 cinfo = idr_find(&info->tx_idr, pi->proto->id); d211ddeb511af5 Cristian Marussi 2021-11-29 822 if (unlikely(!cinfo)) d211ddeb511af5 Cristian Marussi 2021-11-29 823 return -EINVAL; d211ddeb511af5 Cristian Marussi 2021-11-29 824 a4a20b0975dc7b Cristian Marussi 2021-03-16 825 /* 61832b35b4d953 Sudeep Holla 2021-06-08 826 * Initialise protocol id now from protocol handle to avoid it being a4a20b0975dc7b Cristian Marussi 2021-03-16 827 * overridden by mistake (or malice) by the protocol code mangling with 61832b35b4d953 Sudeep Holla 2021-06-08 828 * the scmi_xfer structure prior to this. a4a20b0975dc7b Cristian Marussi 2021-03-16 829 */ a4a20b0975dc7b Cristian Marussi 2021-03-16 830 xfer->hdr.protocol_id = pi->proto->id; e30d91d4ffda0b Cristian Marussi 2021-06-06 831 reinit_completion(&xfer->done); a4a20b0975dc7b Cristian Marussi 2021-03-16 832 729d3530a50417 Lukasz Luba 2019-12-17 833 trace_scmi_xfer_begin(xfer->transfer_id, xfer->hdr.id, 729d3530a50417 Lukasz Luba 2019-12-17 834 xfer->hdr.protocol_id, xfer->hdr.seq, 729d3530a50417 Lukasz Luba 2019-12-17 835 xfer->hdr.poll_completion); 729d3530a50417 Lukasz Luba 2019-12-17 836 ed7c04c1fea3b0 Cristian Marussi 2021-08-03 837 xfer->state = SCMI_XFER_SENT_OK; ed7c04c1fea3b0 Cristian Marussi 2021-08-03 838 /* ed7c04c1fea3b0 Cristian Marussi 2021-08-03 839 * Even though spinlocking is not needed here since no race is possible ed7c04c1fea3b0 Cristian Marussi 2021-08-03 840 * on xfer->state due to the monotonically increasing tokens allocation, ed7c04c1fea3b0 Cristian Marussi 2021-08-03 841 * we must anyway ensure xfer->state initialization is not re-ordered ed7c04c1fea3b0 Cristian Marussi 2021-08-03 842 * after the .send_message() to be sure that on the RX path an early ed7c04c1fea3b0 Cristian Marussi 2021-08-03 843 * ISR calling scmi_rx_callback() cannot see an old stale xfer->state. ed7c04c1fea3b0 Cristian Marussi 2021-08-03 844 */ ed7c04c1fea3b0 Cristian Marussi 2021-08-03 845 smp_mb(); ed7c04c1fea3b0 Cristian Marussi 2021-08-03 846 5c8a47a5a91d4d Viresh Kumar 2020-01-31 847 ret = info->desc->ops->send_message(cinfo, xfer); aa4f886f3893f8 Sudeep Holla 2017-03-28 848 if (ret < 0) { 5c8a47a5a91d4d Viresh Kumar 2020-01-31 849 dev_dbg(dev, "Failed to send message %d\n", ret); aa4f886f3893f8 Sudeep Holla 2017-03-28 850 return ret; aa4f886f3893f8 Sudeep Holla 2017-03-28 851 } aa4f886f3893f8 Sudeep Holla 2017-03-28 852 5a731aebd31bf8 Cristian Marussi 2021-11-29 853 ret = scmi_wait_for_message_response(cinfo, xfer); d4c3751a8de2de Sudeep Holla 2017-07-20 854 if (!ret && xfer->hdr.status) d4c3751a8de2de Sudeep Holla 2017-07-20 855 ret = scmi_to_linux_errno(xfer->hdr.status); d4c3751a8de2de Sudeep Holla 2017-07-20 856 5c8a47a5a91d4d Viresh Kumar 2020-01-31 857 if (info->desc->ops->mark_txdone) 5c8a47a5a91d4d Viresh Kumar 2020-01-31 858 info->desc->ops->mark_txdone(cinfo, ret); aa4f886f3893f8 Sudeep Holla 2017-03-28 859 729d3530a50417 Lukasz Luba 2019-12-17 860 trace_scmi_xfer_end(xfer->transfer_id, xfer->hdr.id, bad0d73b657412 Sudeep Holla 2020-06-09 861 xfer->hdr.protocol_id, xfer->hdr.seq, ret); 729d3530a50417 Lukasz Luba 2019-12-17 862 aa4f886f3893f8 Sudeep Holla 2017-03-28 863 return ret; aa4f886f3893f8 Sudeep Holla 2017-03-28 864 } aa4f886f3893f8 Sudeep Holla 2017-03-28 865 :::::: The code at line 812 was first introduced by commit :::::: aa4f886f3893f88146e8e02fd1e9c5c9e43cbcc1 firmware: arm_scmi: add basic driver infrastructure for SCMI :::::: TO: Sudeep Holla :::::: CC: Sudeep Holla -- 0-DAY CI Kernel Test Service https://01.org/lkp