Re: [PATCH v6 7/9] iio: accel: mma8452: Drop unneeded lock acquire on read
From: Joshua Crofts
Date: Tue Aug 25 2026 - 06:22:08 EST
On Tue, 25 Aug 2026 10:27:45 +0200
Esben Haabendal <esben@xxxxxxxxxx> wrote:
> There is no need to acquire data->lock when calling mma8452_read(), and
> dropping that makes it less likely to end up in an AB-BA deadlock
> situation.
>
> Signed-off-by: Esben Haabendal <esben@xxxxxxxxxx>
> ---
> drivers/iio/accel/mma8452.c | 2 --
> 1 file changed, 2 deletions(-)
>
> diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
> index 7ef1a9a91c31..9ae2c3e60576 100644
> --- a/drivers/iio/accel/mma8452.c
> +++ b/drivers/iio/accel/mma8452.c
> @@ -504,9 +504,7 @@ static int mma8452_read_raw(struct iio_dev *indio_dev,
> if (!iio_device_claim_direct(indio_dev))
> return -EBUSY;
>
> - mutex_lock(&data->lock);
> ret = mma8452_read(data, buffer);
> - mutex_unlock(&data->lock);
> iio_device_release_direct(indio_dev);
> if (ret < 0)
> return ret;
>
Sashiko has something to say and I tend to agree at the moment:
Could removing this lock expose mma8452_read() to race conditions with PM
auto-suspend and event configuration?
mma8452_read() can be interrupted by the PM auto-suspend worker, which puts
the device in STANDBY and disables regulators while mma8452_drdy() is actively
polling over I2C. This can lead to I/O timeouts or errors.
Additionally, concurrent sysfs writes to event configurations invoke
mma8452_change_config(), which puts the hardware into STANDBY to modify
registers. The Standby transition flushes the hardware FIFO. If this occurs
between the mma8452_drdy() check and the i2c_smbus_read_i2c_block_data() in
mma8452_read(), the block read will fetch flushed or stale data.
--
Kind regards,
Joshua Crofts