* Re: [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking
2026-04-11 7:25 [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking Advaith Neelacantan
@ 2026-04-11 8:09 ` Dan Carpenter
2026-04-11 8:53 ` Greg Kroah-Hartman
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Dan Carpenter @ 2026-04-11 8:09 UTC (permalink / raw)
To: Advaith Neelacantan
Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Greg Kroah-Hartman,
linux-iio, linux-staging, linux-kernel
On Sat, Apr 11, 2026 at 12:55:04PM +0530, Advaith Neelacantan wrote:
> Replace mutex lock/unlock pairs with
>
> guard(mutex) for automatic scope-based locking.
>
> Simplifies code by removing need to manually unlock.
>
> Signed-off-by: Advaith Neelacantan <advaith.neelacantan@gmail.com>
The original code works fine.
We're not accepting this sort of patch for old code unless it fixes
a bug.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking
2026-04-11 7:25 [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking Advaith Neelacantan
2026-04-11 8:09 ` Dan Carpenter
@ 2026-04-11 8:53 ` Greg Kroah-Hartman
2026-04-14 12:55 ` kernel test robot
2026-04-20 13:06 ` Jonathan Cameron
3 siblings, 0 replies; 5+ messages in thread
From: Greg Kroah-Hartman @ 2026-04-11 8:53 UTC (permalink / raw)
To: Advaith Neelacantan
Cc: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, linux-iio,
linux-staging, linux-kernel
On Sat, Apr 11, 2026 at 12:55:04PM +0530, Advaith Neelacantan wrote:
> Replace mutex lock/unlock pairs with
>
> guard(mutex) for automatic scope-based locking.
>
> Simplifies code by removing need to manually unlock.
Only use guard() for new code, no need to change existing code for that
at all.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking
2026-04-11 7:25 [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking Advaith Neelacantan
2026-04-11 8:09 ` Dan Carpenter
2026-04-11 8:53 ` Greg Kroah-Hartman
@ 2026-04-14 12:55 ` kernel test robot
2026-04-20 13:06 ` Jonathan Cameron
3 siblings, 0 replies; 5+ messages in thread
From: kernel test robot @ 2026-04-14 12:55 UTC (permalink / raw)
To: Advaith Neelacantan, Lars-Peter Clausen
Cc: llvm, oe-kbuild-all, Michael Hennerich, Jonathan Cameron,
David Lechner, Nuno Sá, Andy Shevchenko, Greg Kroah-Hartman,
linux-iio, linux-staging, linux-kernel, Advaith Neelacantan
Hi Advaith,
kernel test robot noticed the following build errors:
[auto build test ERROR on staging/staging-testing]
url: https://github.com/intel-lab-lkp/linux/commits/Advaith-Neelacantan/staging-iio-frequency-ad9832-use-guard-mutex-for-locking/20260414-074602
base: staging/staging-testing
patch link: https://lore.kernel.org/r/20260411072503.106621-2-advaith.neelacantan%40gmail.com
patch subject: [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking
config: i386-buildonly-randconfig-002-20260414 (https://download.01.org/0day-ci/archive/20260414/202604142016.fnd3WPI1-lkp@intel.com/config)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260414/202604142016.fnd3WPI1-lkp@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202604142016.fnd3WPI1-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/staging/iio/frequency/ad9832.c:182:3: error: cannot jump from this goto statement to its label
182 | goto error_ret;
| ^
drivers/staging/iio/frequency/ad9832.c:184:2: note: jump bypasses initialization of variable with __attribute__((cleanup))
184 | guard(mutex)(&st->lock);
| ^
include/linux/cleanup.h:419:2: note: expanded from macro 'guard'
419 | CLASS(_name, __UNIQUE_ID(guard))
| ^
include/linux/cleanup.h:300:3: note: expanded from macro 'CLASS'
300 | class_##_name##_constructor
| ^
<scratch space>:16:1: note: expanded from here
16 | class_mutex_constructor
| ^
note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:16:23: note: expanded from macro '__PASTE'
16 | #define __PASTE(a, b) ___PASTE(a, b)
| ^
include/linux/compiler_types.h:15:24: note: expanded from macro '___PASTE'
15 | #define ___PASTE(a, b) a##b
| ^
<scratch space>:22:1: note: expanded from here
22 | __UNIQUE_ID_unlock_451
| ^
drivers/staging/iio/frequency/ad9832.c:184:2: note: jump bypasses initialization of variable with __attribute__((cleanup))
include/linux/cleanup.h:419:15: note: expanded from macro 'guard'
419 | CLASS(_name, __UNIQUE_ID(guard))
| ^
include/linux/compiler.h:168:2: note: expanded from macro '__UNIQUE_ID'
168 | __PASTE(__UNIQUE_ID_, \
| ^
include/linux/compiler_types.h:16:23: note: expanded from macro '__PASTE'
16 | #define __PASTE(a, b) ___PASTE(a, b)
| ^
include/linux/compiler_types.h:15:24: note: expanded from macro '___PASTE'
15 | #define ___PASTE(a, b) a##b
| ^
<scratch space>:10:1: note: expanded from here
10 | __UNIQUE_ID_guard_450
| ^
1 error generated.
vim +182 drivers/staging/iio/frequency/ad9832.c
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 170
f1b07cdf6ba396d drivers/staging/iio/frequency/ad9832.c Federico Di Pierro 2014-06-29 171 static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
f1b07cdf6ba396d drivers/staging/iio/frequency/ad9832.c Federico Di Pierro 2014-06-29 172 const char *buf, size_t len)
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 173 {
b671bb3bf0d0165 drivers/staging/iio/frequency/ad9832.c Lars-Peter Clausen 2012-05-12 174 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
638e59fc8c867b4 drivers/staging/iio/dds/ad9832.c Jonathan Cameron 2011-10-06 175 struct ad9832_state *st = iio_priv(indio_dev);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 176 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 177 int ret;
e5e26dd5bb740c3 drivers/staging/iio/frequency/ad9832.c Jingoo Han 2013-08-20 178 unsigned long val;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 179
e5e26dd5bb740c3 drivers/staging/iio/frequency/ad9832.c Jingoo Han 2013-08-20 180 ret = kstrtoul(buf, 10, &val);
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 181 if (ret)
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 @182 goto error_ret;
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 183
baf560e48a75741 drivers/staging/iio/frequency/ad9832.c Advaith Neelacantan 2026-04-11 184 guard(mutex)(&st->lock);
e15fbc91a4304a9 drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-10-25 185 switch ((u32)this_attr->address) {
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 186 case AD9832_FREQ0HM:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 187 case AD9832_FREQ1HM:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 188 ret = ad9832_write_frequency(st, this_attr->address, val);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 189 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 190 case AD9832_PHASE0H:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 191 case AD9832_PHASE1H:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 192 case AD9832_PHASE2H:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 193 case AD9832_PHASE3H:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 194 ret = ad9832_write_phase(st, this_attr->address, val);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 195 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 196 case AD9832_PINCTRL_EN:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 197 st->ctrl_ss &= ~AD9832_SELSRC;
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 198 st->ctrl_ss |= FIELD_PREP(AD9832_SELSRC, val ? 0 : 1);
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 199
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 200 st->data = cpu_to_be16(FIELD_PREP(AD9832_CMD_MSK, AD9832_CMD_SYNCSELSRC) |
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 201 st->ctrl_ss);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 202 ret = spi_sync(st->spi, &st->msg);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 203 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 204 case AD9832_FREQ_SYM:
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 205 if (val == 1 || val == 0) {
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 206 st->ctrl_fp &= ~AD9832_FREQ;
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 207 st->ctrl_fp |= FIELD_PREP(AD9832_FREQ, val ? 1 : 0);
f1b07cdf6ba396d drivers/staging/iio/frequency/ad9832.c Federico Di Pierro 2014-06-29 208 } else {
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 209 ret = -EINVAL;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 210 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 211 }
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 212 st->data = cpu_to_be16(FIELD_PREP(AD9832_CMD_MSK, AD9832_CMD_FPSELECT) |
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 213 st->ctrl_fp);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 214 ret = spi_sync(st->spi, &st->msg);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 215 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 216 case AD9832_PHASE_SYM:
260974704ea4c01 drivers/staging/iio/frequency/ad9832.c Sachin Kamat 2014-03-07 217 if (val > 3) {
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 218 ret = -EINVAL;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 219 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 220 }
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 221
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 222 st->ctrl_fp &= ~AD9832_PHASE_MASK;
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 223 st->ctrl_fp |= FIELD_PREP(AD9832_PHASE_MASK, val);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 224
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 225 st->data = cpu_to_be16(FIELD_PREP(AD9832_CMD_MSK, AD9832_CMD_FPSELECT) |
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 226 st->ctrl_fp);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 227 ret = spi_sync(st->spi, &st->msg);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 228 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 229 case AD9832_OUTPUT_EN:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 230 if (val)
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 231 st->ctrl_src &= ~(AD9832_RESET | AD9832_SLEEP | AD9832_CLR);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 232 else
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 233 st->ctrl_src |= FIELD_PREP(AD9832_RESET, 1);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 234
85c9e6d592e1c17 drivers/staging/iio/frequency/ad9832.c Siddharth Menon 2025-04-16 235 st->data = cpu_to_be16(FIELD_PREP(AD9832_CMD_MSK, AD9832_CMD_SLEEPRESCLR) |
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 236 st->ctrl_src);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 237 ret = spi_sync(st->spi, &st->msg);
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 238 break;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 239 default:
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 240 ret = -ENODEV;
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 241 }
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 242
ea707584bac187c drivers/staging/iio/dds/ad9832.c Michael Hennerich 2011-02-09 243 error_ret:
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 244 return ret ? ret : len;
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 245 }
4a8e6c33e88b09a drivers/staging/iio/dds/ad9832.c Cliff Cai 2010-10-27 246
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking
2026-04-11 7:25 [PATCH] staging: iio: frequency: ad9832: use guard(mutex) for locking Advaith Neelacantan
` (2 preceding siblings ...)
2026-04-14 12:55 ` kernel test robot
@ 2026-04-20 13:06 ` Jonathan Cameron
3 siblings, 0 replies; 5+ messages in thread
From: Jonathan Cameron @ 2026-04-20 13:06 UTC (permalink / raw)
To: Advaith Neelacantan
Cc: Lars-Peter Clausen, Michael Hennerich, David Lechner,
Nuno Sá, Andy Shevchenko, Greg Kroah-Hartman, linux-iio,
linux-staging, linux-kernel
On Sat, 11 Apr 2026 12:55:04 +0530
Advaith Neelacantan <advaith.neelacantan@gmail.com> wrote:
> Replace mutex lock/unlock pairs with
>
> guard(mutex) for automatic scope-based locking.
>
> Simplifies code by removing need to manually unlock.
>
> Signed-off-by: Advaith Neelacantan <advaith.neelacantan@gmail.com>
What everyone else has stated indeed applies, though I'm more flexible
if you are doing this part of driver cleanup that is more substantial
and touches nearby code.
However, it's buggy. Read the guidance in cleanup.h and make sure
you understand why. Note that LLVM will warn about the problem,
GCC currently does not.
> ---
> drivers/staging/iio/frequency/ad9832.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/staging/iio/frequency/ad9832.c b/drivers/staging/iio/frequency/ad9832.c
> index b87ea1781..73c47a049 100644
> --- a/drivers/staging/iio/frequency/ad9832.c
> +++ b/drivers/staging/iio/frequency/ad9832.c
> @@ -181,7 +181,7 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
> if (ret)
> goto error_ret;
>
> - mutex_lock(&st->lock);
> + guard(mutex)(&st->lock);
> switch ((u32)this_attr->address) {
> case AD9832_FREQ0HM:
> case AD9832_FREQ1HM:
> @@ -239,7 +239,6 @@ static ssize_t ad9832_write(struct device *dev, struct device_attribute *attr,
> default:
> ret = -ENODEV;
> }
> - mutex_unlock(&st->lock);
>
> error_ret:
> return ret ? ret : len;
^ permalink raw reply [flat|nested] 5+ messages in thread