2022-01-17 17:08:50

by Kiwoong Kim

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

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 <[email protected]>
---
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


2022-01-21 13:07:44

by Bart Van Assche

[permalink] [raw]
Subject: Re: [PATCH v1] scsi: ufs: use an generic error code in ufshcd_set_dev_pwr_mode

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 <[email protected]>
> ---
> 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.