Hi Jonathan,
First bad commit (maybe != root cause):
tree:
https://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git testing
head: 448fea9496ae166a285858bf17eb5473eb77f4dc
commit: 53e5aaab4c850f99a9eb3144cc29eccea7570c7f [39/69] iio:cdc:ad7150: Move driver out
of staging.
config: x86_64-randconfig-m001-20210405 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 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>
smatch warnings:
drivers/iio/cdc/ad7150.c:321 ad7150_write_event_config() error: uninitialized symbol
'ret'.
vim +/ret +321 drivers/iio/cdc/ad7150.c
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 232 static
int ad7150_write_event_config(struct iio_dev *indio_dev,
c4f0ebd91467c7 drivers/staging/iio/cdc/ad7150.c Shraddha Barke 2015-12-29 233
const struct iio_chan_spec *chan,
c4f0ebd91467c7 drivers/staging/iio/cdc/ad7150.c Shraddha Barke 2015-12-29 234
enum iio_event_type type,
1489d629a481dc drivers/staging/iio/cdc/ad7150.c Lars-Peter Clausen 2013-10-07 235
enum iio_event_direction dir, int state)
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 236 {
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 237
struct ad7150_chip_info *chip = iio_priv(indio_dev);
887b66527c6435 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 238 int
ret;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 239
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 240 /*
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 241 *
There is only a single shared control and no on chip
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 242 *
interrupt disables for the two interrupt lines.
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 243 *
So, enabling will switch the events configured to enable
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 244 *
whatever was most recently requested and if necessary enable_irq()
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 245 *
the interrupt and any disable will disable_irq() for that
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 246 *
channels interrupt.
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 247 */
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 248 if
(!state) {
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 249 if
((chip->int_enabled[chan->channel]) &&
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 250
(type == chip->type) && (dir == chip->dir)) {
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 251
disable_irq(chip->interrupts[chan->channel]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 252
chip->int_enabled[chan->channel] = false;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 253 }
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 254
return 0;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 255 }
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 256
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 257
mutex_lock(&chip->state_lock);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 258 if
((type != chip->type) || (dir != chip->dir)) {
"ret" is not initialize on the false path.
887b66527c6435 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 259 int
rising = (dir == IIO_EV_DIR_RISING);
887b66527c6435 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 260 u8
thresh_type, cfg, fixed;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 261
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 262 /*
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 263 *
Need to temporarily disable both interrupts if
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 264 *
enabled - this is to avoid races around changing
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 265 *
config and thresholds.
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 266 *
Note enable/disable_irq() are reference counted so
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 267 *
no need to check if already enabled.
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 268 */
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 269
disable_irq(chip->interrupts[0]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 270
disable_irq(chip->interrupts[1]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 271
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 272 ret
= i2c_smbus_read_byte_data(chip->client, AD7150_CFG_REG);
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 273 if
(ret < 0)
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 274
goto error_ret;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 275
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 276 cfg
= ret & ~(AD7150_CFG_THRESHTYPE_MSK | AD7150_CFG_FIX);
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 277
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 278 if
(type == IIO_EV_TYPE_THRESH_ADAPTIVE)
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 279
fixed = 0;
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 280
else
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 281
fixed = 1;
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 282
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 283 if
(rising)
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 284
thresh_type = AD7150_CFG_TT_POS;
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 285
else
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 286
thresh_type = AD7150_CFG_TT_NEG;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 287
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 288 cfg
|= FIELD_PREP(AD7150_CFG_FIX, fixed) |
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 289
FIELD_PREP(AD7150_CFG_THRESHTYPE_MSK, thresh_type);
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 290
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 291 ret
= i2c_smbus_write_byte_data(chip->client, AD7150_CFG_REG,
45fdaf4b51faa3 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 292
cfg);
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 293 if
(ret < 0)
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 294
goto error_ret;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 295
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 296 /*
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 297 *
There is a potential race condition here, but not easy
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 298 *
to close given we can't disable the interrupt at the
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 299 *
chip side of things. Rely on the status bit.
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 300 */
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 301
chip->type = type;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 302
chip->dir = dir;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 303
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 304 /*
update control attributes */
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 305 ret
= ad7150_write_event_params(indio_dev, chan->channel, type,
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 306
dir);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 307 if
(ret)
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 308
goto error_ret;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 309 /*
reenable any irq's we disabled whilst changing mode */
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 310
enable_irq(chip->interrupts[0]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 311
enable_irq(chip->interrupts[1]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 312 }
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 313 if
(!chip->int_enabled[chan->channel]) {
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 314
enable_irq(chip->interrupts[chan->channel]);
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 315
chip->int_enabled[chan->channel] = true;
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 316 }
b8546bdcf08e97 drivers/staging/iio/cdc/ad7150.c Jonathan Cameron 2021-03-14 317
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 318
error_ret:
531efd6aa09916 drivers/staging/iio/adc/ad7150.c Jonathan Cameron 2011-09-02 319
mutex_unlock(&chip->state_lock);
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 320
91ca1a8c584f55 drivers/staging/iio/cdc/ad7150.c Pan Bian 2016-12-03 @321
return ret;
54c5be349bf66e drivers/staging/iio/adc/ad7150.c Barry Song 2010-10-27 322 }
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org