Re: [PATCH 2/7] iio: dac: ad5592r: use lock guards

From: kernel test robot
Date: Mon Apr 07 2025 - 23:00:38 EST


Hi Bartosz,

kernel test robot noticed the following build errors:

[auto build test ERROR on 0af2f6be1b4281385b618cb86ad946eded089ac8]

url: https://github.com/intel-lab-lkp/linux/commits/Bartosz-Golaszewski/iio-dac-ad5592r-destroy-mutexes-in-detach-paths/20250407-152721
base: 0af2f6be1b4281385b618cb86ad946eded089ac8
patch link: https://lore.kernel.org/r/20250407-gpiochip-set-rv-iio-v1-2-8431b003a145%40linaro.org
patch subject: [PATCH 2/7] iio: dac: ad5592r: use lock guards
config: arm-randconfig-001-20250408 (https://download.01.org/0day-ci/archive/20250408/202504081058.aukPDkTg-lkp@xxxxxxxxx/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project 92c93f5286b9ff33f27ff694d2dc33da1c07afdd)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250408/202504081058.aukPDkTg-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202504081058.aukPDkTg-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

>> drivers/iio/dac/ad5592r-base.c:350:2: error: cannot jump from switch statement to this case label
350 | default:
| ^
drivers/iio/dac/ad5592r-base.c:303:3: note: jump bypasses initialization of variable with __attribute__((cleanup))
303 | guard(mutex)(&st->lock);
| ^
include/linux/cleanup.h:319:15: note: expanded from macro 'guard'
319 | CLASS(_name, __UNIQUE_ID(guard))
| ^
include/linux/compiler.h:166:29: note: expanded from macro '__UNIQUE_ID'
166 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
| ^
include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE'
84 | #define __PASTE(a,b) ___PASTE(a,b)
| ^
include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE'
83 | #define ___PASTE(a,b) a##b
| ^
<scratch space>:104:1: note: expanded from here
104 | __UNIQUE_ID_guard492
| ^
drivers/iio/dac/ad5592r-base.c:308:2: error: cannot jump from switch statement to this case label
308 | case IIO_CHAN_INFO_SCALE:
| ^
drivers/iio/dac/ad5592r-base.c:303:3: note: jump bypasses initialization of variable with __attribute__((cleanup))
303 | guard(mutex)(&st->lock);
| ^
include/linux/cleanup.h:319:15: note: expanded from macro 'guard'
319 | CLASS(_name, __UNIQUE_ID(guard))
| ^
include/linux/compiler.h:166:29: note: expanded from macro '__UNIQUE_ID'
166 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
| ^
include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE'
84 | #define __PASTE(a,b) ___PASTE(a,b)
| ^
include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE'
83 | #define ___PASTE(a,b) a##b
| ^
<scratch space>:104:1: note: expanded from here
104 | __UNIQUE_ID_guard492
| ^
drivers/iio/dac/ad5592r-base.c:427:2: error: cannot jump from switch statement to this case label
427 | default:
| ^
drivers/iio/dac/ad5592r-base.c:419:3: note: jump bypasses initialization of variable with __attribute__((cleanup))
419 | guard(mutex)(&st->lock);
| ^
include/linux/cleanup.h:319:15: note: expanded from macro 'guard'
319 | CLASS(_name, __UNIQUE_ID(guard))
| ^
include/linux/compiler.h:166:29: note: expanded from macro '__UNIQUE_ID'
166 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
| ^
include/linux/compiler_types.h:84:22: note: expanded from macro '__PASTE'
84 | #define __PASTE(a,b) ___PASTE(a,b)
| ^
include/linux/compiler_types.h:83:23: note: expanded from macro '___PASTE'
83 | #define ___PASTE(a,b) a##b
| ^
<scratch space>:169:1: note: expanded from here
169 | __UNIQUE_ID_guard497
| ^
3 errors generated.


vim +350 drivers/iio/dac/ad5592r-base.c

56ca9db862bf3d7 Paul Cercueil 2016-04-05 287
56ca9db862bf3d7 Paul Cercueil 2016-04-05 288 static int ad5592r_write_raw(struct iio_dev *iio_dev,
56ca9db862bf3d7 Paul Cercueil 2016-04-05 289 struct iio_chan_spec const *chan, int val, int val2, long mask)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 290 {
56ca9db862bf3d7 Paul Cercueil 2016-04-05 291 struct ad5592r_state *st = iio_priv(iio_dev);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 292 int ret;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 293
56ca9db862bf3d7 Paul Cercueil 2016-04-05 294 switch (mask) {
56ca9db862bf3d7 Paul Cercueil 2016-04-05 295 case IIO_CHAN_INFO_RAW:
56ca9db862bf3d7 Paul Cercueil 2016-04-05 296
56ca9db862bf3d7 Paul Cercueil 2016-04-05 297 if (val >= (1 << chan->scan_type.realbits) || val < 0)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 298 return -EINVAL;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 299
56ca9db862bf3d7 Paul Cercueil 2016-04-05 300 if (!chan->output)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 301 return -EINVAL;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 302
299c6ede9f0343c Bartosz Golaszewski 2025-04-07 303 guard(mutex)(&st->lock);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 304 ret = st->ops->write_dac(st, chan->channel, val);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 305 if (!ret)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 306 st->cached_dac[chan->channel] = val;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 307 return ret;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 308 case IIO_CHAN_INFO_SCALE:
56ca9db862bf3d7 Paul Cercueil 2016-04-05 309 if (chan->type == IIO_VOLTAGE) {
56ca9db862bf3d7 Paul Cercueil 2016-04-05 310 bool gain;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 311
56ca9db862bf3d7 Paul Cercueil 2016-04-05 312 if (val == st->scale_avail[0][0] &&
56ca9db862bf3d7 Paul Cercueil 2016-04-05 313 val2 == st->scale_avail[0][1])
56ca9db862bf3d7 Paul Cercueil 2016-04-05 314 gain = false;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 315 else if (val == st->scale_avail[1][0] &&
56ca9db862bf3d7 Paul Cercueil 2016-04-05 316 val2 == st->scale_avail[1][1])
56ca9db862bf3d7 Paul Cercueil 2016-04-05 317 gain = true;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 318 else
56ca9db862bf3d7 Paul Cercueil 2016-04-05 319 return -EINVAL;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 320
299c6ede9f0343c Bartosz Golaszewski 2025-04-07 321 guard(mutex)(&st->lock);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 322
56ca9db862bf3d7 Paul Cercueil 2016-04-05 323 ret = st->ops->reg_read(st, AD5592R_REG_CTRL,
56ca9db862bf3d7 Paul Cercueil 2016-04-05 324 &st->cached_gp_ctrl);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 325 if (ret < 0) {
33c53cbf8f7bc8d Sergiu Cuciurean 2020-05-20 326 mutex_unlock(&st->lock);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 327 return ret;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 328 }
56ca9db862bf3d7 Paul Cercueil 2016-04-05 329
56ca9db862bf3d7 Paul Cercueil 2016-04-05 330 if (chan->output) {
56ca9db862bf3d7 Paul Cercueil 2016-04-05 331 if (gain)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 332 st->cached_gp_ctrl |=
56ca9db862bf3d7 Paul Cercueil 2016-04-05 333 AD5592R_REG_CTRL_DAC_RANGE;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 334 else
56ca9db862bf3d7 Paul Cercueil 2016-04-05 335 st->cached_gp_ctrl &=
56ca9db862bf3d7 Paul Cercueil 2016-04-05 336 ~AD5592R_REG_CTRL_DAC_RANGE;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 337 } else {
56ca9db862bf3d7 Paul Cercueil 2016-04-05 338 if (gain)
56ca9db862bf3d7 Paul Cercueil 2016-04-05 339 st->cached_gp_ctrl |=
56ca9db862bf3d7 Paul Cercueil 2016-04-05 340 AD5592R_REG_CTRL_ADC_RANGE;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 341 else
56ca9db862bf3d7 Paul Cercueil 2016-04-05 342 st->cached_gp_ctrl &=
56ca9db862bf3d7 Paul Cercueil 2016-04-05 343 ~AD5592R_REG_CTRL_ADC_RANGE;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 344 }
56ca9db862bf3d7 Paul Cercueil 2016-04-05 345
299c6ede9f0343c Bartosz Golaszewski 2025-04-07 346 return st->ops->reg_write(st, AD5592R_REG_CTRL,
56ca9db862bf3d7 Paul Cercueil 2016-04-05 347 st->cached_gp_ctrl);
56ca9db862bf3d7 Paul Cercueil 2016-04-05 348 }
56ca9db862bf3d7 Paul Cercueil 2016-04-05 349 break;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 @350 default:
56ca9db862bf3d7 Paul Cercueil 2016-04-05 351 return -EINVAL;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 352 }
56ca9db862bf3d7 Paul Cercueil 2016-04-05 353
56ca9db862bf3d7 Paul Cercueil 2016-04-05 354 return 0;
56ca9db862bf3d7 Paul Cercueil 2016-04-05 355 }
56ca9db862bf3d7 Paul Cercueil 2016-04-05 356

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki