[PATCH v1] scsi: ufs: use an generic error code in ufshcd_set_dev_pwr_mode

Kiwoong Kim posted 1 patch 4 years, 5 months ago
drivers/scsi/ufs/ufshcd.c | 1 +
1 file changed, 1 insertion(+)
[PATCH v1] scsi: ufs: use an generic error code in ufshcd_set_dev_pwr_mode
Posted by Kiwoong Kim 4 years, 5 months ago
The return value of ufshcd_set_dev_pwr_mode is given to
device pm core. However, the function currently returns a result
in scsi command and the device pm core doesn't understand it.
It might lead to unexpected behaviors of user land. I found
the return value led to platform reset in Android.

This patch is to use an generic code for SSU failures.

Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
---
 drivers/scsi/ufs/ufshcd.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 1049e41..a60816c 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -8669,6 +8669,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
 			    pwr_mode, ret);
 		if (ret > 0 && scsi_sense_valid(&sshdr))
 			scsi_print_sense_hdr(sdp, NULL, &sshdr);
+		ret = -EIO;
 	}
 
 	if (!ret)
-- 
2.7.4

Re: [PATCH v1] scsi: ufs: use an generic error code in ufshcd_set_dev_pwr_mode
Posted by Bart Van Assche 4 years, 5 months ago
On 1/17/22 02:29, Kiwoong Kim wrote:
> The return value of ufshcd_set_dev_pwr_mode is given to
> device pm core. However, the function currently returns a result
> in scsi command and the device pm core doesn't understand it.
> It might lead to unexpected behaviors of user land. I found
> the return value led to platform reset in Android.
> 
> This patch is to use an generic code for SSU failures.
> 
> Signed-off-by: Kiwoong Kim <kwmad.kim@samsung.com>
> ---
>   drivers/scsi/ufs/ufshcd.c | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
> index 1049e41..a60816c 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -8669,6 +8669,7 @@ static int ufshcd_set_dev_pwr_mode(struct ufs_hba *hba,
>   			    pwr_mode, ret);
>   		if (ret > 0 && scsi_sense_valid(&sshdr))
>   			scsi_print_sense_hdr(sdp, NULL, &sshdr);
> +		ret = -EIO;
>   	}
>   
>   	if (!ret)

Shouldn't "ret = -EIO" only be executed if ret > 0? Additionally, please 
update the documentation of ufshcd_set_dev_pwr_mode(). I'm referring to 
the following comment: "Returns non-zero if failed to set the requested 
power mode".

Thanks,

Bart.