[PATCH 4.19 02/93] scsi: ufs: skip shutdown if hba is not powered

From: Greg Kroah-Hartman
Date: Sun Oct 27 2019 - 17:33:18 EST

From: Stanley Chu <stanley.chu@xxxxxxxxxxxx>

[ Upstream commit f51913eef23f74c3bd07899dc7f1ed6df9e521d8 ]

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

To solve this issue, simply add checking to skip shutdown for above kind of

Link: https://lore.kernel.org/r/1568780438-28753-1-git-send-email-stanley.chu@xxxxxxxxxxxx
Signed-off-by: Stanley Chu <stanley.chu@xxxxxxxxxxxx>
Acked-by: Bean Huo <beanhuo@xxxxxxxxxx>
Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
drivers/scsi/ufs/ufshcd.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index b8b59cfeacd1f..4aaba3e030554 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -7874,6 +7874,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;