CC: [email protected]
CC: [email protected]
TO: Krzysztof Kozlowski <[email protected]>
CC: Wolfram Sang <[email protected]>

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 <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

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/?id=4a2d5f663dab6614772d8e28ca190b127ba46d9d
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 <[email protected]>
:::::: CC: Linus Torvalds <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to