| From a2640cc3abee147f9adeb6ca4431c4fd4c5dbf7b Mon Sep 17 00:00:00 2001 |
| From: Stanley Chu <stanley.chu@mediatek.com> |
| Date: Wed, 18 Sep 2019 12:20:38 +0800 |
| Subject: [PATCH] scsi: ufs: skip shutdown if hba is not powered |
| |
| commit f51913eef23f74c3bd07899dc7f1ed6df9e521d8 upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c |
| index aa3bfc20b737..d485eaa90731 100644 |
| --- a/drivers/scsi/ufs/ufshcd.c |
| +++ b/drivers/scsi/ufs/ufshcd.c |
| @@ -8065,6 +8065,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; |
| |
| -- |
| 2.7.4 |
| |