CC: [email protected] CC: [email protected] BCC: [email protected] CC: [email protected] TO: "Lars-Peter Clausen" <[email protected]> CC: Jonathan Cameron <[email protected]> CC: Alexandru Tachici <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git testing head: 58058b684d135495bf99d460e5c37fb36bc33684 commit: 60e0ee74d11157dbbfedfc91e56f97a12735d6d3 [17/20] iio: adc: ad_sigma_delta: Add sequencer support :::::: branch date: 5 hours ago :::::: commit date: 6 hours ago config: riscv-randconfig-c006-20220327 (https://download.01.org/0day-ci/archive/20220328/[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 riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git/commit/?id=60e0ee74d11157dbbfedfc91e56f97a12735d6d3 git remote add jic23-iio https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git git fetch --no-tags jic23-iio testing git checkout 60e0ee74d11157dbbfedfc91e56f97a12735d6d3 # 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 >>) include/linux/printk.h:639:2: note: expanded from macro 'printk_ratelimited' if (__ratelimit(&_rs)) \ ^ include/linux/hid.h:1036:3: note: Loop condition is false. Exiting loop pr_warn_ratelimited("%s: Invalid code %d type %d\n", ^ include/linux/printk.h:656:2: note: expanded from macro 'pr_warn_ratelimited' printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:640:3: note: expanded from macro 'printk_ratelimited' printk(fmt, ##__VA_ARGS__); \ ^ include/linux/printk.h:446:26: note: expanded from macro 'printk' #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) ^ include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap' __printk_index_emit(_fmt, NULL, NULL); \ ^ include/linux/printk.h:392:34: note: expanded from macro '__printk_index_emit' #define __printk_index_emit(...) do {} while (0) ^ include/linux/hid.h:1037:9: note: Access to field 'name' results in a dereference of a null pointer (loaded from variable 'input') input->name, c, type); ^ include/linux/printk.h:656:49: note: expanded from macro 'pr_warn_ratelimited' printk_ratelimited(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/printk.h:640:17: note: expanded from macro 'printk_ratelimited' printk(fmt, ##__VA_ARGS__); \ ^~~~~~~~~~~ include/linux/printk.h:446:60: note: expanded from macro 'printk' #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) ^~~~~~~~~~~ include/linux/printk.h:418:19: note: expanded from macro 'printk_index_wrap' _p_func(_fmt, ##__VA_ARGS__); \ ^~~~~~~~~~~ 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. Suppressed 4 warnings (4 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. 5 warnings generated. include/linux/dcache.h:516:9: warning: Access to field 'd_inode' results in a dereference of a null pointer (loaded from variable 'dentry') [clang-analyzer-core.NullDereference] return dentry->d_inode; ^ fs/overlayfs/inode.c:1102:28: note: Assuming 'upperdentry' is null struct inode *realinode = upperdentry ? d_inode(upperdentry) : NULL; ^~~~~~~~~~~ fs/overlayfs/inode.c:1102:28: note: '?' condition is false fs/overlayfs/inode.c:1104:31: note: Assuming 'lowerpath' is null struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; ^~~~~~~~~ fs/overlayfs/inode.c:1104:31: note: '?' condition is false fs/overlayfs/inode.c:1104:2: note: 'lowerdentry' initialized to a null pointer value struct dentry *lowerdentry = lowerpath ? lowerpath->dentry : NULL; ^~~~~~~~~~~~~~~~~~~~~~~~~~ fs/overlayfs/inode.c:1107:13: note: 'bylower' is false int fsid = bylower ? lowerpath->layer->fsid : 0; ^~~~~~~ fs/overlayfs/inode.c:1107:13: note: '?' condition is false fs/overlayfs/inode.c:1110:12: note: Assuming field 'newinode' is null int err = oip->newinode ? -EEXIST : -ENOMEM; ^~~~~~~~~~~~~ fs/overlayfs/inode.c:1110:12: note: '?' condition is false fs/overlayfs/inode.c:1112:7: note: 'realinode' is null if (!realinode) ^~~~~~~~~ fs/overlayfs/inode.c:1112:2: note: Taking true branch if (!realinode) ^ fs/overlayfs/inode.c:1113:23: note: Passing null pointer value via 1st parameter 'dentry' realinode = d_inode(lowerdentry); ^~~~~~~~~~~ fs/overlayfs/inode.c:1113:15: note: Calling 'd_inode' realinode = d_inode(lowerdentry); ^~~~~~~~~~~~~~~~~~~~ include/linux/dcache.h:516:9: note: Access to field 'd_inode' results in a dereference of a null pointer (loaded from variable 'dentry') return dentry->d_inode; ^~~~~~ Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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/iio/adc/ad_sigma_delta.c:493:23: warning: Array subscript is >> undefined [clang-analyzer-core.uninitialized.ArraySubscript] converted_channel = data[status_pos] & sigma_delta->info->status_ch_mask; ^ ~~~~~~~~~~ drivers/iio/adc/ad_sigma_delta.c:441:2: note: 'status_pos' declared without an initial value unsigned int status_pos; ^~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/adc/ad_sigma_delta.c:449:6: note: Assuming field 'data_reg' is equal to 0 if (sigma_delta->info->data_reg != 0) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/adc/ad_sigma_delta.c:449:2: note: Taking false branch if (sigma_delta->info->data_reg != 0) ^ drivers/iio/adc/ad_sigma_delta.c:455:6: note: Assuming field 'status_appended' is true if (sigma_delta->status_appended) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/adc/ad_sigma_delta.c:455:2: note: Taking true branch if (sigma_delta->status_appended) ^ drivers/iio/adc/ad_sigma_delta.c:460:2: note: 'Default' branch taken. Execution continues on line 485 switch (reg_size) { ^ drivers/iio/adc/ad_sigma_delta.c:485:6: note: Assuming field 'active_slots' is not equal to 1 if (sigma_delta->active_slots == 1) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/iio/adc/ad_sigma_delta.c:485:2: note: Taking false branch if (sigma_delta->active_slots == 1) { ^ drivers/iio/adc/ad_sigma_delta.c:490:19: note: Field 'status_appended' is true if (sigma_delta->status_appended) { ^ drivers/iio/adc/ad_sigma_delta.c:490:2: note: Taking true branch if (sigma_delta->status_appended) { ^ drivers/iio/adc/ad_sigma_delta.c:493:23: note: Array subscript is undefined converted_channel = data[status_pos] & sigma_delta->info->status_ch_mask; ^ ~~~~~~~~~~ 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. 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/iio/adc/ad7124.c:165:8: warning: Excessive padding in 'struct ad7124_state' (76 padding bytes, where 12 is optimal). Optimal fields order: sd, chip_info, channels, mclk, adc_control, num_channels, cfg_slots_status, vref, live_cfgs_fifo, cfgs_lock, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct ad7124_state { ~~~~~~~^~~~~~~~~~~~~~ drivers/iio/adc/ad7124.c:165:8: note: Excessive padding in 'struct ad7124_state' (76 padding bytes, where 12 is optimal). Optimal fields order: sd, chip_info, channels, mclk, adc_control, num_channels, cfg_slots_status, vref, live_cfgs_fifo, cfgs_lock, consider reordering the fields or adding explicit padding members struct ad7124_state { ~~~~~~~^~~~~~~~~~~~~~ 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. 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. 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. 4 warnings generated. drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c:372:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = 0; ^ ~ drivers/net/can/spi/mcp251xfd/mcp251xfd-regmap.c:372:4: note: Value stored to 'err' is never read err = 0; ^ ~ 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. 4 warnings generated. drivers/crypto/sa2ul.c:155:8: warning: Excessive padding in 'struct sa_alg_tmpl' (11 padding bytes, where 3 is optimal). Optimal fields order: alg, type, registered, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding] struct sa_alg_tmpl { ~~~~~~~^~~~~~~~~~~~~ drivers/crypto/sa2ul.c:155:8: note: Excessive padding in 'struct sa_alg_tmpl' (11 padding bytes, where 3 is optimal). Optimal fields order: alg, type, registered, consider reordering the fields or adding explicit padding members struct sa_alg_tmpl { ~~~~~~~^~~~~~~~~~~~~ drivers/crypto/sa2ul.c:558:10: warning: Dereference of null pointer [clang-analyzer-core.NullDereference] *out = cpu_to_be32(*((u32 *)iv)); ^ include/linux/byteorder/generic.h:94:21: note: expanded from macro 'cpu_to_be32' #define cpu_to_be32 __cpu_to_be32 ^ vim +493 drivers/iio/adc/ad_sigma_delta.c af3008485ea037 Lars-Peter Clausen 2012-08-10 431 af3008485ea037 Lars-Peter Clausen 2012-08-10 432 static irqreturn_t ad_sd_trigger_handler(int irq, void *p) af3008485ea037 Lars-Peter Clausen 2012-08-10 433 { af3008485ea037 Lars-Peter Clausen 2012-08-10 434 struct iio_poll_func *pf = p; af3008485ea037 Lars-Peter Clausen 2012-08-10 435 struct iio_dev *indio_dev = pf->indio_dev; af3008485ea037 Lars-Peter Clausen 2012-08-10 436 struct ad_sigma_delta *sigma_delta = iio_device_get_drvdata(indio_dev); 0fb6ee8d0b5e90 Lars-Peter Clausen 2020-11-24 437 uint8_t *data = sigma_delta->rx_buf; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 438 unsigned int transfer_size; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 439 unsigned int sample_size; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 440 unsigned int sample_pos; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 441 unsigned int status_pos; af3008485ea037 Lars-Peter Clausen 2012-08-10 442 unsigned int reg_size; f0aef2d0186431 Lars-Peter Clausen 2018-11-13 443 unsigned int data_reg; af3008485ea037 Lars-Peter Clausen 2012-08-10 444 af3008485ea037 Lars-Peter Clausen 2012-08-10 445 reg_size = indio_dev->channels[0].scan_type.realbits + af3008485ea037 Lars-Peter Clausen 2012-08-10 446 indio_dev->channels[0].scan_type.shift; af3008485ea037 Lars-Peter Clausen 2012-08-10 447 reg_size = DIV_ROUND_UP(reg_size, 8); af3008485ea037 Lars-Peter Clausen 2012-08-10 448 f0aef2d0186431 Lars-Peter Clausen 2018-11-13 449 if (sigma_delta->info->data_reg != 0) f0aef2d0186431 Lars-Peter Clausen 2018-11-13 450 data_reg = sigma_delta->info->data_reg; f0aef2d0186431 Lars-Peter Clausen 2018-11-13 451 else f0aef2d0186431 Lars-Peter Clausen 2018-11-13 452 data_reg = AD_SD_REG_DATA; f0aef2d0186431 Lars-Peter Clausen 2018-11-13 453 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 454 /* Status word will be appended to the sample during transfer */ 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 455 if (sigma_delta->status_appended) 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 456 transfer_size = reg_size + 1; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 457 else 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 458 transfer_size = reg_size; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 459 af3008485ea037 Lars-Peter Clausen 2012-08-10 460 switch (reg_size) { af3008485ea037 Lars-Peter Clausen 2012-08-10 461 case 4: af3008485ea037 Lars-Peter Clausen 2012-08-10 462 case 2: af3008485ea037 Lars-Peter Clausen 2012-08-10 463 case 1: 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 464 status_pos = reg_size; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 465 ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[0]); af3008485ea037 Lars-Peter Clausen 2012-08-10 466 break; af3008485ea037 Lars-Peter Clausen 2012-08-10 467 case 3: 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 468 /* 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 469 * Data array after transfer will look like (if status is appended): 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 470 * data[] = { [0][sample][sample][sample][status] } 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 471 * Keeping the first byte 0 shifts the status postion by 1 byte to the right. 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 472 */ 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 473 status_pos = reg_size + 1; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 474 af3008485ea037 Lars-Peter Clausen 2012-08-10 475 /* We store 24 bit samples in a 32 bit word. Keep the upper af3008485ea037 Lars-Peter Clausen 2012-08-10 476 * byte set to zero. */ 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 477 ad_sd_read_reg_raw(sigma_delta, data_reg, transfer_size, &data[1]); af3008485ea037 Lars-Peter Clausen 2012-08-10 478 break; af3008485ea037 Lars-Peter Clausen 2012-08-10 479 } af3008485ea037 Lars-Peter Clausen 2012-08-10 480 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 481 /* 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 482 * For devices sampling only one channel at 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 483 * once, there is no need for sample number tracking. 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 484 */ 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 485 if (sigma_delta->active_slots == 1) { a1be505f49cacb Lars-Peter Clausen 2013-09-19 486 iio_push_to_buffers_with_timestamp(indio_dev, data, pf->timestamp); 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 487 goto irq_handled; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 488 } 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 489 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 490 if (sigma_delta->status_appended) { 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 491 u8 converted_channel; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 492 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 @493 converted_channel = data[status_pos] & sigma_delta->info->status_ch_mask; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 494 if (converted_channel != sigma_delta->slots[sigma_delta->current_slot]) { 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 495 /* 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 496 * Desync occurred during continuous sampling of multiple channels. 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 497 * Drop this incomplete sample and start from first channel again. 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 498 */ 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 499 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 500 sigma_delta->current_slot = 0; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 501 goto irq_handled; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 502 } 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 503 } 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 504 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 505 sample_size = indio_dev->channels[0].scan_type.storagebits / 8; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 506 sample_pos = sample_size * sigma_delta->current_slot; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 507 memcpy(&sigma_delta->samples_buf[sample_pos], data, sample_size); 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 508 sigma_delta->current_slot++; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 509 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 510 if (sigma_delta->current_slot == sigma_delta->active_slots) { 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 511 sigma_delta->current_slot = 0; 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 512 iio_push_to_buffers_with_timestamp(indio_dev, sigma_delta->samples_buf, 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 513 pf->timestamp); 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 514 } af3008485ea037 Lars-Peter Clausen 2012-08-10 515 60e0ee74d11157 Lars-Peter Clausen 2022-03-22 516 irq_handled: af3008485ea037 Lars-Peter Clausen 2012-08-10 517 iio_trigger_notify_done(indio_dev->trig); af3008485ea037 Lars-Peter Clausen 2012-08-10 518 sigma_delta->irq_dis = false; af3008485ea037 Lars-Peter Clausen 2012-08-10 519 enable_irq(sigma_delta->spi->irq); af3008485ea037 Lars-Peter Clausen 2012-08-10 520 af3008485ea037 Lars-Peter Clausen 2012-08-10 521 return IRQ_HANDLED; af3008485ea037 Lars-Peter Clausen 2012-08-10 522 } af3008485ea037 Lars-Peter Clausen 2012-08-10 523 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
