From c36e34dc08a48c8f56cbe61b467ea720f6e6b104 Mon Sep 17 00:00:00 2001 From: Jason Zhang Date: Mon, 8 Aug 2022 19:42:33 +0800 Subject: [PATCH] iio: imu: lsm6dsr: fix deadlock on resume The sequence of hw->lock and hw->page_lock in st_lsm6dsr_update_watermark and st_lsm6dsr_fsm_init are in reverse, which may results in deadlock. The fifo water mark is held by iio_dev->mlock, Remove hw->lock in st_lsm6dsr_update_watermark. Signed-off-by: Jason Zhang Change-Id: I9a1f60cf0ba4444f285ecb95fb37745fbf45e609 --- drivers/iio/imu/st_lsm6dsr/st_lsm6dsr_buffer.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/iio/imu/st_lsm6dsr/st_lsm6dsr_buffer.c b/drivers/iio/imu/st_lsm6dsr/st_lsm6dsr_buffer.c index cb1d8ced5529..af99c6234877 100644 --- a/drivers/iio/imu/st_lsm6dsr/st_lsm6dsr_buffer.c +++ b/drivers/iio/imu/st_lsm6dsr/st_lsm6dsr_buffer.c @@ -225,8 +225,6 @@ int st_lsm6dsr_update_watermark(struct st_lsm6dsr_sensor *sensor, fifo_watermark = max_t(u16, fifo_watermark, 2); - mutex_lock(&hw->lock); - err = st_lsm6dsr_read_atomic(hw, ST_LSM6DSR_REG_FIFO_CTRL1_ADDR + 1, sizeof(data), &data); if (err < 0) @@ -238,8 +236,6 @@ int st_lsm6dsr_update_watermark(struct st_lsm6dsr_sensor *sensor, err = st_lsm6dsr_write_atomic(hw, ST_LSM6DSR_REG_FIFO_CTRL1_ADDR, sizeof(wdata), (u8 *)&wdata); out: - mutex_unlock(&hw->lock); - return err < 0 ? err : 0; }