summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStanley Chu <stanley.chu@mediatek.com>2019-09-18 12:20:38 +0800
committerMartin K. Petersen <martin.petersen@oracle.com>2019-09-23 23:09:42 -0400
commitf51913eef23f74c3bd07899dc7f1ed6df9e521d8 (patch)
tree70399be71d89ff5703e6f82be27acfda955c9341
parentc9c53749375ccce0191f89b86732e642f914bd82 (diff)
downloadlinux-stable-f51913eef23f74c3bd07899dc7f1ed6df9e521d8.tar.gz
linux-stable-f51913eef23f74c3bd07899dc7f1ed6df9e521d8.tar.bz2
linux-stable-f51913eef23f74c3bd07899dc7f1ed6df9e521d8.zip
scsi: ufs: skip shutdown if hba is not powered
In some cases, hba may go through shutdown flow without successful initialization and then make system hang. For example, if ufshcd_change_power_mode() gets error and leads to ufshcd_hba_exit() to release resources of the host, future shutdown flow may hang the system since the host register will be accessed in unpowered state. To solve this issue, simply add checking to skip shutdown for above kind of situation. Link: https://lore.kernel.org/r/1568780438-28753-1-git-send-email-stanley.chu@mediatek.com Signed-off-by: Stanley Chu <stanley.chu@mediatek.com> Acked-by: Bean Huo <beanhuo@micron.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r--drivers/scsi/ufs/ufshcd.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index c4a015e42045..57b2c3a8def3 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8140,6 +8140,9 @@ int ufshcd_shutdown(struct ufs_hba *hba)
{
int ret = 0;
+ if (!hba->is_powered)
+ goto out;
+
if (ufshcd_is_ufs_dev_poweroff(hba) && ufshcd_is_link_off(hba))
goto out;