CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Krzysztof Kozlowski <krzk(a)kernel.org>
CC: Wolfram Sang <wsa-dev(a)sang-engineering.com>
Hi Krzysztof,
First bad commit (maybe != root cause):
tree:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 4d41ead6ead97c3730bbd186a601a64828668f01
commit: 4a2d5f663dab6614772d8e28ca190b127ba46d9d i2c: Enable compile testing for more
drivers
date: 7 months ago
:::::: branch date: 4 hours ago
:::::: commit date: 7 months ago
config: microblaze-randconfig-m031-20200828 (attached as .config)
compiler: microblaze-linux-gcc (GCC) 9.3.0
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
Reported-by: Dan Carpenter <dan.carpenter(a)oracle.com>
New smatch warnings:
drivers/i2c/busses/i2c-mv64xxx.c:586 mv64xxx_i2c_execute_msg() error: double unlocked
'drv_data->lock' (orig line 584)
drivers/i2c/busses/i2c-mv64xxx.c:656 mv64xxx_i2c_offload_xfer() error: double unlocked
'drv_data->lock' (orig line 654)
Old smatch warnings:
drivers/i2c/busses/i2c-mv64xxx.c:510 mv64xxx_i2c_intr() warn: this loop depends on readl()
succeeding
arch/microblaze/include/asm/thread_info.h:94 current_thread_info() error: uninitialized
symbol 'sp'.
#
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit...
git remote add linus
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 4a2d5f663dab6614772d8e28ca190b127ba46d9d
vim +586 drivers/i2c/busses/i2c-mv64xxx.c
^1da177e4c3f415 Linus Torvalds 2005-04-16 570
^1da177e4c3f415 Linus Torvalds 2005-04-16 571 static int
eda6bee6c7e67b5 Rodolfo Giometti 2010-11-26 572 mv64xxx_i2c_execute_msg(struct
mv64xxx_i2c_data *drv_data, struct i2c_msg *msg,
4243fa0bad551b8 Russell King 2013-05-16 573 int is_last)
^1da177e4c3f415 Linus Torvalds 2005-04-16 574 {
^1da177e4c3f415 Linus Torvalds 2005-04-16 575 unsigned long flags;
^1da177e4c3f415 Linus Torvalds 2005-04-16 576
^1da177e4c3f415 Linus Torvalds 2005-04-16 577
spin_lock_irqsave(&drv_data->lock, flags);
^1da177e4c3f415 Linus Torvalds 2005-04-16 578
aa6bce5319a54c0 Russell King 2013-05-16 579 drv_data->state =
MV64XXX_I2C_STATE_WAITING_FOR_START_COND;
79970db213344b4 Wolfram Sang 2014-02-13 580
eda6bee6c7e67b5 Rodolfo Giometti 2010-11-26 581 drv_data->send_stop = is_last;
^1da177e4c3f415 Linus Torvalds 2005-04-16 582 drv_data->block = 1;
b0200abeba31340 Wolfram Sang 2014-02-13 583 mv64xxx_i2c_send_start(drv_data);
^1da177e4c3f415 Linus Torvalds 2005-04-16 @584
spin_unlock_irqrestore(&drv_data->lock, flags);
^1da177e4c3f415 Linus Torvalds 2005-04-16 585
^1da177e4c3f415 Linus Torvalds 2005-04-16 @586
mv64xxx_i2c_wait_for_completion(drv_data);
^1da177e4c3f415 Linus Torvalds 2005-04-16 587 return drv_data->rc;
^1da177e4c3f415 Linus Torvalds 2005-04-16 588 }
^1da177e4c3f415 Linus Torvalds 2005-04-16 589
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 590 static void
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 591 mv64xxx_i2c_prepare_tx(struct
mv64xxx_i2c_data *drv_data)
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 592 {
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 593 struct i2c_msg *msg =
drv_data->msgs;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 594 u32 buf[2];
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 595
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 596 memcpy(buf, msg->buf, msg->len);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 597
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 598 writel(buf[0], drv_data->reg_base +
MV64XXX_I2C_REG_TX_DATA_LO);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 599 writel(buf[1], drv_data->reg_base +
MV64XXX_I2C_REG_TX_DATA_HI);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 600 }
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 601
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 602 static int
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 603 mv64xxx_i2c_offload_xfer(struct
mv64xxx_i2c_data *drv_data)
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 604 {
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 605 struct i2c_msg *msgs =
drv_data->msgs;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 606 int num = drv_data->num_msgs;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 607 unsigned long ctrl_reg;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 608 unsigned long flags;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 609
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 610
spin_lock_irqsave(&drv_data->lock, flags);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 611
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 612 /* Build transaction */
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 613 ctrl_reg =
MV64XXX_I2C_BRIDGE_CONTROL_ENABLE |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 614 (msgs[0].addr <<
MV64XXX_I2C_BRIDGE_CONTROL_ADDR_SHIFT);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 615
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 616 if (msgs[0].flags & I2C_M_TEN)
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 617 ctrl_reg |=
MV64XXX_I2C_BRIDGE_CONTROL_ADDR_EXT;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 618
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 619 /* Single write message transaction */
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 620 if (num == 1 && !(msgs[0].flags
& I2C_M_RD)) {
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 621 size_t len = msgs[0].len - 1;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 622
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 623 ctrl_reg |=
MV64XXX_I2C_BRIDGE_CONTROL_WR |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 624 (len <<
MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 625 mv64xxx_i2c_prepare_tx(drv_data);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 626 }
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 627 /* Single read message transaction */
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 628 else if (num == 1 &&
msgs[0].flags & I2C_M_RD) {
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 629 size_t len = msgs[0].len - 1;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 630
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 631 ctrl_reg |=
MV64XXX_I2C_BRIDGE_CONTROL_RD |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 632 (len <<
MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 633 }
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 634 /*
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 635 * Transaction with one write and one
read message. This is
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 636 * guaranteed by the
mv64xx_i2c_can_offload() checks.
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 637 */
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 638 else if (num == 2) {
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 639 size_t lentx = msgs[0].len - 1;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 640 size_t lenrx = msgs[1].len - 1;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 641
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 642 ctrl_reg |=
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 643 MV64XXX_I2C_BRIDGE_CONTROL_RD |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 644 MV64XXX_I2C_BRIDGE_CONTROL_WR |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 645 (lentx <<
MV64XXX_I2C_BRIDGE_CONTROL_TX_SIZE_SHIFT) |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 646 (lenrx <<
MV64XXX_I2C_BRIDGE_CONTROL_RX_SIZE_SHIFT) |
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 647
MV64XXX_I2C_BRIDGE_CONTROL_REPEATED_START;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 648 mv64xxx_i2c_prepare_tx(drv_data);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 649 }
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 650
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 651 /* Execute transaction */
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 652 drv_data->block = 1;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 653 writel(ctrl_reg, drv_data->reg_base
+ MV64XXX_I2C_REG_BRIDGE_CONTROL);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 @654
spin_unlock_irqrestore(&drv_data->lock, flags);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 655
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 @656
mv64xxx_i2c_wait_for_completion(drv_data);
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 657
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 658 return drv_data->rc;
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 659 }
00d8689b85a7bb3 Thomas Petazzoni 2014-12-11 660
:::::: The code at line 586 was first introduced by commit
:::::: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Linux-2.6.12-rc2
:::::: TO: Linus Torvalds <torvalds(a)ppc970.osdl.org>
:::::: CC: Linus Torvalds <torvalds(a)ppc970.osdl.org>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org