Thread (3 messages) flat view 3 messages, 1 author, 2021-04-23

Re: [PATCH v20 1/2] scsi: ufs: Enable power management for wlun

From: Adrian Hunter <adrian.hunter@intel.com>
Date: 2021-04-23 06:19:00
Also in: linux-arm-msm, linux-mediatek, linux-samsung-soc, linux-scsi, lkml

On 23/04/21 7:23 am, Adrian Hunter wrote:
On 22/04/21 7:38 pm, Asutosh Das (asd) wrote:
quoted
On 4/20/2021 12:42 AM, Adrian Hunter wrote:
quoted
On 20/04/21 7:15 am, Adrian Hunter wrote:
quoted
On 20/04/21 12:53 am, Asutosh Das (asd) wrote:
quoted
On 4/19/2021 11:37 AM, Adrian Hunter wrote:
quoted
On 16/04/21 10:49 pm, Asutosh Das wrote:
quoted
Co-developed-by: Can Guo <redacted>
Signed-off-by: Can Guo <redacted>
Signed-off-by: Asutosh Das <redacted>
---
I came across 3 issues while testing.  See comments below.
Hi Adrian
Thanks for the comments.
quoted
<SNIP>
quoted
@@ -5794,7 +5839,7 @@ static void ufshcd_err_handling_unprepare(struct ufs_hba *hba)
       if (ufshcd_is_clkscaling_supported(hba))
           ufshcd_clk_scaling_suspend(hba, false);
       ufshcd_clear_ua_wluns(hba);
ufshcd_clear_ua_wluns() deadlocks trying to clear UFS_UPIU_RPMB_WLUN
if sdev_rpmb is suspended and sdev_ufs_device is suspending.
e.g. ufshcd_wl_suspend() is waiting on host_sem while ufshcd_err_handler()
is running, at which point sdev_rpmb has already suspended.
Umm, I didn't understand this deadlock.
When you say, sdev_rpmb is suspended, does it mean runtime_suspended?
sdev_ufs_device is suspending - this can't be runtime_suspending, while ufshcd_err_handling_unprepare is running.

If you've a call-stack of this deadlock, please can you share it with me. I'll also try to reproduce this.
Yes it is system suspend. sdev_rpmb has suspended, sdev_ufs_device is waiting on host_sem.
ufshcd_err_handler() holds host_sem. ufshcd_clear_ua_wlun(UFS_UPIU_RPMB_WLUN) gets stuck.
I will get some call-stacks.
Hi Adrian,

Thanks for the call stacks.
From the current information, I can't say for sure why it'd get stuck in blk_queue_enter().
I presume SCSI is leaving the RPMB WLUN device runtime suspended and consequently the queue status is RPM_SUSPENDED
quoted
I tried reproducing this issue on my setup yesterday but couldn't.
Here's what I did:
1. sdev_rpmb is RPM_SUSPENDED, checked before initiating system suspend
2. sdev_ufs_device is RPM_RESUMED
3. I triggered system suspend (echo mem > /sys/power/state) and scheduled the error handler from ufshcd_wl_suspend().
4. Waited until error handler ran and then ufshcd_wl_suspend() blocks on host_sem.
5. The ufshcd_clear_wa_wlun(UFS_UPIU_RPMB_WLUN) went through fine.

Do you've some specific steps to reproduce this or a script, perhaps? If so, please can you share it with me. I will try again.
I was using a device that gives occasional errors, but I will what see I can do.
I have attached 2 patches to reproduce the issue, and the test script I used.
Note it is using down_timeout() so it doesn't lock up completely.
The kernel messages are:

[   79.385456] ufshcd_wl_suspend: doing ufshcd_schedule_eh_work
[   79.385511] ufshcd_wl_suspend: sleeping 1000 ms
[   79.386916] ufshcd_err_handler: start
[   79.386979] ufshcd_err_handler: got sem
[   79.387053] ufshcd_err_handling_unprepare: start
[   79.387302] ufshcd_clear_ua_wluns: before ufshcd_clear_ua_wlun(hba, UFS_UPIU_RPMB_WLUN)
[   80.435878] ufshcd_wl_suspend: trying to get sem
[   85.683876] ufshcd_wl_suspend: failed to get sem
[   85.683993] ufs_device_wlun 0:0:0:49488: PM: failed to suspend async: error -22
[   85.686901] ufshcd_clear_ua_wluns: after ufshcd_clear_ua_wlun(hba, UFS_UPIU_RPMB_WLUN), ret 0
[   85.687025] ufshcd_err_handling_unprepare: finish
[   85.687090] ufshcd_err_handler: finish 

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help