CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
In-Reply-To: <20211019060158.1482722-1-vkoul(a)kernel.org>
References: <20211019060158.1482722-1-vkoul(a)kernel.org>
TO: Vinod Koul <vkoul(a)kernel.org>
TO: Bjorn Andersson <bjorn.andersson(a)linaro.org>
TO: Wolfram Sang <wsa-dev(a)sang-engineering.com>
CC: linux-arm-msm(a)vger.kernel.org
CC: Vinod Koul <vkoul(a)kernel.org>
CC: Andy Gross <agross(a)kernel.org>
CC: Sumit Semwal <sumit.semwal(a)linaro.org>
CC: Douglas Anderson <dianders(a)chromium.org>
CC: Matthias Kaehlcke <mka(a)chromium.org>
CC: linux-i2c(a)vger.kernel.org
CC: linux-kernel(a)vger.kernel.org
Hi Vinod,
I love your patch! Perhaps something to improve:
[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v5.15-rc7 next-20211029]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url:
https://github.com/0day-ci/linux/commits/Vinod-Koul/i2c-qcom-geni-Add-sup...
base:
https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
:::::: branch date: 10 days ago
:::::: commit date: 10 days ago
config: riscv-randconfig-c006-20211028 (attached as .config)
compiler: clang version 14.0.0 (
https://github.com/llvm/llvm-project
5db7568a6a1fcb408eb8988abdaff2a225a8eb72)
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/0day-ci/linux/commit/8244d69587ec2d94d34a75f5a3865d250...
git remote add linux-review
https://github.com/0day-ci/linux
git fetch --no-tags linux-review
Vinod-Koul/i2c-qcom-geni-Add-support-for-GPI-DMA/20211019-140347
git checkout 8244d69587ec2d94d34a75f5a3865d250e6880c7
# save the attached .config 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 <lkp(a)intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
^
drivers/scsi/ufs/ufshcd.c:5223:35: note: Access to field 'cmd_active' results
in a dereference of a null pointer (loaded from field 'active_uic_cmd')
hba->active_uic_cmd->cmd_active = 0;
~~~~~~~~~~~~~~ ^
Suppressed 19 warnings (18 in non-user code, 1 with check filters).
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.
Suppressed 5 warnings (5 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.
5 warnings generated.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
drivers/extcon/extcon-max77843.c:837:2: warning: Value stored to 'ret' is never
read [clang-analyzer-deadcode.DeadStores]
ret = regmap_update_bits(max77843->regmap_muic,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/extcon/extcon-max77843.c:837:2: note: Value stored to 'ret' is never
read
ret = regmap_update_bits(max77843->regmap_muic,
^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Suppressed 5 warnings (5 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.
5 warnings generated.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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/i2c/busses/i2c-pxa.c:1334:32: warning: Value stored to 'bri' during its
initialization is never read [clang-analyzer-deadcode.DeadStores]
struct i2c_bus_recovery_info *bri = &i2c->recovery;
^~~ ~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-pxa.c:1334:32: note: Value stored to 'bri' during its
initialization is never read
struct i2c_bus_recovery_info *bri = &i2c->recovery;
^~~ ~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-pxa.c:1335:17: warning: Value stored to 'dev' during its
initialization is never read [clang-analyzer-deadcode.DeadStores]
struct device *dev = i2c->adap.dev.parent;
^~~ ~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-pxa.c:1335:17: note: Value stored to 'dev' during its
initialization is never read
struct device *dev = i2c->adap.dev.parent;
^~~ ~~~~~~~~~~~~~~~~~~~~
Suppressed 5 warnings (5 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.
Suppressed 5 warnings (5 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.
9 warnings generated.
> drivers/i2c/busses/i2c-qcom-geni.c:508:8: warning: Value stored
to 'dma_buf' during its initialization is never read
[clang-analyzer-deadcode.DeadStores]
void *dma_buf = &buf;
^~~~~~~ ~~~~
drivers/i2c/busses/i2c-qcom-geni.c:508:8: note: Value stored to 'dma_buf'
during its initialization is never read
void *dma_buf = &buf;
^~~~~~~ ~~~~
drivers/i2c/busses/i2c-qcom-geni.c:625:3: warning: 6th function call argument is an
uninitialized value [clang-analyzer-core.CallAndMessage]
geni_i2c_gpi_unmap(gi2c, &msgs[i], tx_buf, tx_addr, rx_buf,
rx_addr);
^
drivers/i2c/busses/i2c-qcom-geni.c:647:6: note: 'ret' is >= 0
if (ret < 0) {
^~~
drivers/i2c/busses/i2c-qcom-geni.c:647:2: note: Taking false branch
if (ret < 0) {
^
drivers/i2c/busses/i2c-qcom-geni.c:657:6: note: Assuming field 'se_mode' is
equal to I2C_GPI_DMA
if (gi2c->se_mode == I2C_GPI_DMA) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-qcom-geni.c:657:2: note: Taking true branch
if (gi2c->se_mode == I2C_GPI_DMA) {
^
drivers/i2c/busses/i2c-qcom-geni.c:658:9: note: Calling 'geni_i2c_gsi_xfer'
ret = geni_i2c_gsi_xfer(gi2c, msgs, num);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-qcom-geni.c:576:22: note: 'rx_addr' declared without an
initial value
dma_addr_t tx_addr, rx_addr;
^~~~~~~
drivers/i2c/busses/i2c-qcom-geni.c:582:6: note: Assuming field 'cfg_sent' is
true
if (!gi2c->cfg_sent) {
^~~~~~~~~~~~~~~
drivers/i2c/busses/i2c-qcom-geni.c:582:2: note: Taking false branch
if (!gi2c->cfg_sent) {
^
drivers/i2c/busses/i2c-qcom-geni.c:595:14: note: Assuming 'i' is <
'num'
for (i = 0; i < num; i++) {
^~~~~~~
drivers/i2c/busses/i2c-qcom-geni.c:595:2: note: Loop condition is true. Entering loop
body
for (i = 0; i < num; i++) {
^
drivers/i2c/busses/i2c-qcom-geni.c:597:3: note: Left side of '&&' is
true
dev_dbg(gi2c->se.dev, "msg[%d].len:%d\n", i,
gi2c->cur->len);
^
include/linux/dev_printk.h:158:2: note: expanded from macro 'dev_dbg'
dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
^
include/linux/dev_printk.h:128:3: note: expanded from macro 'dev_printk'
dev_printk_index_emit(level, fmt); \
^
include/linux/dev_printk.h:105:2: note: expanded from macro
'dev_printk_index_emit'
printk_index_subsys_emit("%s %s: ", level, fmt)
^
include/linux/printk.h:413:2: note: expanded from macro
'printk_index_subsys_emit'
__printk_index_emit(fmt, level, subsys_fmt_prefix)
^
include/linux/printk.h:370:7: note: expanded from macro '__printk_index_emit'
if (__builtin_constant_p(_fmt) && __builtin_constant_p(_level))
{ \
^
drivers/i2c/busses/i2c-qcom-geni.c:597:3: note: Taking true branch
dev_dbg(gi2c->se.dev, "msg[%d].len:%d\n", i,
gi2c->cur->len);
^
include/linux/dev_printk.h:158:2: note: expanded from macro 'dev_dbg'
dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
^
include/linux/dev_printk.h:128:3: note: expanded from macro 'dev_printk'
dev_printk_index_emit(level, fmt); \
^
include/linux/dev_printk.h:105:2: note: expanded from macro
'dev_printk_index_emit'
printk_index_subsys_emit("%s %s: ", level, fmt)
^
include/linux/printk.h:413:2: note: expanded from macro
'printk_index_subsys_emit'
__printk_index_emit(fmt, level, subsys_fmt_prefix)
^
include/linux/printk.h:370:3: note: expanded from macro '__printk_index_emit'
if (__builtin_constant_p(_fmt) && __builtin_constant_p(_level))
{ \
^
drivers/i2c/busses/i2c-qcom-geni.c:597:3: note: '?' condition is true
dev_dbg(gi2c->se.dev, "msg[%d].len:%d\n", i,
gi2c->cur->len);
^
include/linux/dev_printk.h:158:2: note: expanded from macro 'dev_dbg'
dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
^
include/linux/dev_printk.h:128:3: note: expanded from macro 'dev_printk'
dev_printk_index_emit(level, fmt); \
^
include/linux/dev_printk.h:105:2: note: expanded from macro
'dev_printk_index_emit'
printk_index_subsys_emit("%s %s: ", level, fmt)
^
include/linux/printk.h:413:2: note: expanded from macro
'printk_index_subsys_emit'
__printk_index_emit(fmt, level, subsys_fmt_prefix)
^
include/linux/printk.h:379:12: note: expanded from macro '__printk_index_emit'
.fmt = __builtin_constant_p(_fmt) ? (_fmt) : NULL, \
^
drivers/i2c/busses/i2c-qcom-geni.c:597:3: note: '?' condition is true
dev_dbg(gi2c->se.dev, "msg[%d].len:%d\n", i,
gi2c->cur->len);
^
include/linux/dev_printk.h:158:2: note: expanded from macro 'dev_dbg'
dev_printk(KERN_DEBUG, dev, dev_fmt(fmt), ##__VA_ARGS__)
^
include/linux/dev_printk.h:128:3: note: expanded from macro 'dev_printk'
dev_printk_index_emit(level, fmt); \
vim +/dma_buf +508 drivers/i2c/busses/i2c-qcom-geni.c
8244d69587ec2d9 Vinod Koul 2021-10-19 501
8244d69587ec2d9 Vinod Koul 2021-10-19 502 static int geni_i2c_gpi(struct geni_i2c_dev
*gi2c, struct i2c_msg *msg,
8244d69587ec2d9 Vinod Koul 2021-10-19 503 struct dma_slave_config *config,
dma_addr_t *dma_addr_p,
8244d69587ec2d9 Vinod Koul 2021-10-19 504 void **buf, unsigned int op, struct
dma_chan *dma_chan)
8244d69587ec2d9 Vinod Koul 2021-10-19 505 {
8244d69587ec2d9 Vinod Koul 2021-10-19 506 struct gpi_i2c_config *peripheral;
8244d69587ec2d9 Vinod Koul 2021-10-19 507 unsigned int flags;
8244d69587ec2d9 Vinod Koul 2021-10-19 @508 void *dma_buf = &buf;
8244d69587ec2d9 Vinod Koul 2021-10-19 509 dma_addr_t addr;
8244d69587ec2d9 Vinod Koul 2021-10-19 510 enum dma_data_direction map_dirn;
8244d69587ec2d9 Vinod Koul 2021-10-19 511 enum dma_transfer_direction dma_dirn;
8244d69587ec2d9 Vinod Koul 2021-10-19 512 struct dma_async_tx_descriptor *desc;
8244d69587ec2d9 Vinod Koul 2021-10-19 513 int ret;
8244d69587ec2d9 Vinod Koul 2021-10-19 514
8244d69587ec2d9 Vinod Koul 2021-10-19 515 peripheral = config->peripheral_config;
8244d69587ec2d9 Vinod Koul 2021-10-19 516
8244d69587ec2d9 Vinod Koul 2021-10-19 517 dma_buf = i2c_get_dma_safe_msg_buf(msg, 1);
8244d69587ec2d9 Vinod Koul 2021-10-19 518 if (!dma_buf)
8244d69587ec2d9 Vinod Koul 2021-10-19 519 return -ENOMEM;
8244d69587ec2d9 Vinod Koul 2021-10-19 520
8244d69587ec2d9 Vinod Koul 2021-10-19 521 if (op == I2C_WRITE)
8244d69587ec2d9 Vinod Koul 2021-10-19 522 map_dirn = DMA_TO_DEVICE;
8244d69587ec2d9 Vinod Koul 2021-10-19 523 else
8244d69587ec2d9 Vinod Koul 2021-10-19 524 map_dirn = DMA_FROM_DEVICE;
8244d69587ec2d9 Vinod Koul 2021-10-19 525
8244d69587ec2d9 Vinod Koul 2021-10-19 526 addr =
dma_map_single(gi2c->se.dev->parent, dma_buf, msg->len, map_dirn);
8244d69587ec2d9 Vinod Koul 2021-10-19 527 if
(dma_mapping_error(gi2c->se.dev->parent, addr)) {
8244d69587ec2d9 Vinod Koul 2021-10-19 528 i2c_put_dma_safe_msg_buf(dma_buf, msg,
false);
8244d69587ec2d9 Vinod Koul 2021-10-19 529 return -ENOMEM;
8244d69587ec2d9 Vinod Koul 2021-10-19 530 }
8244d69587ec2d9 Vinod Koul 2021-10-19 531
8244d69587ec2d9 Vinod Koul 2021-10-19 532 peripheral->rx_len = msg->len;
8244d69587ec2d9 Vinod Koul 2021-10-19 533 peripheral->op = op;
8244d69587ec2d9 Vinod Koul 2021-10-19 534
8244d69587ec2d9 Vinod Koul 2021-10-19 535 ret = dmaengine_slave_config(dma_chan,
config);
8244d69587ec2d9 Vinod Koul 2021-10-19 536 if (ret) {
8244d69587ec2d9 Vinod Koul 2021-10-19 537 dev_err(gi2c->se.dev, "dma config
error: %d for op:%d\n", ret, op);
8244d69587ec2d9 Vinod Koul 2021-10-19 538 goto err_config;
8244d69587ec2d9 Vinod Koul 2021-10-19 539 }
8244d69587ec2d9 Vinod Koul 2021-10-19 540
8244d69587ec2d9 Vinod Koul 2021-10-19 541 peripheral->set_config = false;
8244d69587ec2d9 Vinod Koul 2021-10-19 542 peripheral->multi_msg = true;
8244d69587ec2d9 Vinod Koul 2021-10-19 543 flags = DMA_PREP_INTERRUPT | DMA_CTRL_ACK;
8244d69587ec2d9 Vinod Koul 2021-10-19 544
8244d69587ec2d9 Vinod Koul 2021-10-19 545 if (op == I2C_WRITE)
8244d69587ec2d9 Vinod Koul 2021-10-19 546 dma_dirn = DMA_MEM_TO_DEV;
8244d69587ec2d9 Vinod Koul 2021-10-19 547 else
8244d69587ec2d9 Vinod Koul 2021-10-19 548 dma_dirn = DMA_DEV_TO_MEM;
8244d69587ec2d9 Vinod Koul 2021-10-19 549
8244d69587ec2d9 Vinod Koul 2021-10-19 550 desc = dmaengine_prep_slave_single(dma_chan,
addr, msg->len, dma_dirn, flags);
8244d69587ec2d9 Vinod Koul 2021-10-19 551 if (!desc) {
8244d69587ec2d9 Vinod Koul 2021-10-19 552 dev_err(gi2c->se.dev, "prep_slave_sg
failed\n");
8244d69587ec2d9 Vinod Koul 2021-10-19 553 ret = -EIO;
8244d69587ec2d9 Vinod Koul 2021-10-19 554 goto err_config;
8244d69587ec2d9 Vinod Koul 2021-10-19 555 }
8244d69587ec2d9 Vinod Koul 2021-10-19 556
8244d69587ec2d9 Vinod Koul 2021-10-19 557 desc->callback_result =
i2c_gsi_cb_result;
8244d69587ec2d9 Vinod Koul 2021-10-19 558 desc->callback_param = gi2c;
8244d69587ec2d9 Vinod Koul 2021-10-19 559
8244d69587ec2d9 Vinod Koul 2021-10-19 560 dmaengine_submit(desc);
8244d69587ec2d9 Vinod Koul 2021-10-19 561 *dma_addr_p = addr;
8244d69587ec2d9 Vinod Koul 2021-10-19 562
8244d69587ec2d9 Vinod Koul 2021-10-19 563 return 0;
8244d69587ec2d9 Vinod Koul 2021-10-19 564
8244d69587ec2d9 Vinod Koul 2021-10-19 565 err_config:
8244d69587ec2d9 Vinod Koul 2021-10-19 566 dma_unmap_single(gi2c->se.dev->parent,
addr, msg->len, map_dirn);
8244d69587ec2d9 Vinod Koul 2021-10-19 567 i2c_put_dma_safe_msg_buf(dma_buf, msg,
false);
8244d69587ec2d9 Vinod Koul 2021-10-19 568 return ret;
8244d69587ec2d9 Vinod Koul 2021-10-19 569 }
8244d69587ec2d9 Vinod Koul 2021-10-19 570
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org