Hi Driver synchronization would be easier to understand if we used the clk_scaling_lock as the only lock to provide either shared (down/up_read) or exclusive (down/up_write) access to the host. These patches make changes with that in mind, finally resulting in being able to hold the down_write() lock for the entire error handler duration. If this approach is acceptable, it could be extended to simplify the the synchronization of PM vs error handler and Shutdown vs sysfs. Adrian Hunter (6): scsi: ufs: Encapsulate clk_scaling_lock by inline functions scsi: ufs: Rename clk_scaling_lock to host_rw_sem scsi: ufs: Let ufshcd_[down/up]_read be nested within ufshcd_[down/up]_write scsi: ufs: Fix a possible dead lock in clock scaling scsi: ufs: Reorder dev_cmd locking scsi: ufs: Hold ufshcd_down_write() lock for entire error handler duration drivers/scsi/ufs/ufshcd.c | 104 +++++++++++++++++++++------------------------- drivers/scsi/ufs/ufshcd.h | 41 +++++++++++++++++- 2 files changed, 87 insertions(+), 58 deletions(-) Regards Adrian