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 <jason.zhang@rock-chips.com>
Change-Id: I9a1f60cf0ba4444f285ecb95fb37745fbf45e609
This commit is contained in:
Jason Zhang
2022-08-08 19:42:33 +08:00
committed by Tao Huang
parent 589f31ceda
commit c36e34dc08

View File

@@ -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;
}