2019-11-02 05:05:30

by Can Guo

[permalink] [raw]
Subject: [PATCH v1 1/6] scsi: ufs: Add device reset in link recovery path

In order to recover from hibern8 exit failure, perform a reset in
link recovery path before issuing link start-up.

Signed-off-by: Can Guo <[email protected]>
---
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 c28c144..525f8e6 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -3859,6 +3859,9 @@ static int ufshcd_link_recovery(struct ufs_hba *hba)
ufshcd_set_eh_in_progress(hba);
spin_unlock_irqrestore(hba->host->host_lock, flags);

+ /* Reset the attached device */
+ ufshcd_vops_device_reset(hba);
+
ret = ufshcd_host_reset_and_restore(hba);

spin_lock_irqsave(hba->host->host_lock, flags);
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


2019-11-03 22:09:07

by Bean Huo (beanhuo)

[permalink] [raw]
Subject: RE: [EXT] [PATCH v1 1/6] scsi: ufs: Add device reset in link recovery path

Hi, Can Guo

> In order to recover from hibern8 exit failure, perform a reset in link recovery
> path before issuing link start-up.
>
> Signed-off-by: Can Guo <[email protected]>
> ---
> 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
> c28c144..525f8e6 100644
> --- a/drivers/scsi/ufs/ufshcd.c
> +++ b/drivers/scsi/ufs/ufshcd.c
> @@ -3859,6 +3859,9 @@ static int ufshcd_link_recovery(struct ufs_hba *hba)
> ufshcd_set_eh_in_progress(hba);
> spin_unlock_irqrestore(hba->host->host_lock, flags);
>
> + /* Reset the attached device */
> + ufshcd_vops_device_reset(hba);
> +
> ret = ufshcd_host_reset_and_restore(hba);
>
There is time consumption in reset, It is true that reset can hide/solve some issues.
I don't know if you experienced issue resulting from an absent reset in this case mentioned in
Patch commit comment.

> spin_lock_irqsave(hba->host->host_lock, flags);
> --
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project

2019-11-04 01:03:29

by Can Guo

[permalink] [raw]
Subject: Re: [EXT] [PATCH v1 1/6] scsi: ufs: Add device reset in link recovery path

On 2019-11-04 05:48, Bean Huo (beanhuo) wrote:
> Hi, Can Guo
>
>> In order to recover from hibern8 exit failure, perform a reset in link
>> recovery
>> path before issuing link start-up.
>>
>> Signed-off-by: Can Guo <[email protected]>
>> ---
>> 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
>> c28c144..525f8e6 100644
>> --- a/drivers/scsi/ufs/ufshcd.c
>> +++ b/drivers/scsi/ufs/ufshcd.c
>> @@ -3859,6 +3859,9 @@ static int ufshcd_link_recovery(struct ufs_hba
>> *hba)
>> ufshcd_set_eh_in_progress(hba);
>> spin_unlock_irqrestore(hba->host->host_lock, flags);
>>
>> + /* Reset the attached device */
>> + ufshcd_vops_device_reset(hba);
>> +
>> ret = ufshcd_host_reset_and_restore(hba);
>>
> There is time consumption in reset, It is true that reset can
> hide/solve some issues.
> I don't know if you experienced issue resulting from an absent reset
> in this case mentioned in
> Patch commit comment.
>

Hi Bean,

Yes, we did see some issues without this device reset here. For example,
link start-up failure and/or NOP-IN timeout during probe stage.

Best regards,
Can Guo.

>> spin_lock_irqsave(hba->host->host_lock, flags);
>> --
>> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora
>> Forum,
>> a Linux Foundation Collaborative Project