scsi: ufs: Fix livelock of ufshcd_clear_ua_wluns()
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 7 Jan 2021 18:53:15 +0000 (10:53 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 8 Jan 2021 03:50:48 +0000 (22:50 -0500)
commit4ee7ee530bc2bae6268247988d86722c65d02a37
tree72ecc304617175e95a1ab2c573a8854c080f4cc6
parent901d01c8e50c35a182073219a38b9c6391e59144
scsi: ufs: Fix livelock of ufshcd_clear_ua_wluns()

When gate_work/ungate_work experience an error during hibern8_enter or exit
we can livelock:

 ufshcd_err_handler()
   ufshcd_scsi_block_requests()
   ufshcd_reset_and_restore()
     ufshcd_clear_ua_wluns() -> stuck
   ufshcd_scsi_unblock_requests()

In order to avoid this, ufshcd_clear_ua_wluns() can be called per recovery
flows such as suspend/resume, link_recovery, and error_handler.

Link: https://lore.kernel.org/r/20210107185316.788815-2-jaegeuk@kernel.org
Fixes: 1918651f2d7e ("scsi: ufs: Clear UAC for RPMB after ufshcd resets")
Reviewed-by: Can Guo <cang@codeaurora.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/ufs/ufshcd.c