Re: [PATCH v6 03/12] iio: dac: ad5686: acquire lock when doing powerdown control

From: Andy Shevchenko

Date: Tue May 05 2026 - 09:01:57 EST


On Tue, May 05, 2026 at 01:35:04PM +0100, Rodrigo Alencar via B4 Relay wrote:

> Protect access of pwr_down_mode and pwr_down_mask fields with existing
> mutex lock. Each channel exposes their own attributes for controlling
> powerdown modes and powerdown state. This fixes potential race conditions
> as those the write functions perform non-atomic read-modify-write
> operations to those pwr_down_* fields. This issue exists since the ad5686
> driver was first introduced.

...

> static ssize_t ad5686_read_dac_powerdown(struct iio_dev *indio_dev,
> {
> struct ad5686_state *st = iio_priv(indio_dev);
>
> + guard(mutex)(&st->lock);
> +
> return sysfs_emit(buf, "%d\n", !!(st->pwr_down_mask &
> (0x3 << (chan->channel * 2))));

Why not use ad5686_get_powerdown_mode() instead?

> }

...

> static ssize_t ad5686_write_dac_powerdown(struct iio_dev *indio_dev,
> if (ret)
> return ret;
>
> + guard(mutex)(&st->lock);
> +
> if (readin)
> st->pwr_down_mask |= (0x3 << (chan->channel * 2));
> else

Similar question here...

--
With Best Regards,
Andy Shevchenko