Messages in this thread | | | Date | Tue, 2 Mar 2021 08:20:10 -0800 | From | Asutosh Das <> | Subject | Re: [PATCH v9 1/2] scsi: ufs: Enable power management for wlun |
| |
On Tue, Mar 02 2021 at 06:14 -0800, Adrian Hunter wrote: >On 2/03/21 5:21 am, Asutosh Das wrote: >> During runtime-suspend of ufs host, the scsi devices are >> already suspended and so are the queues associated with them. >> But the ufs host sends SSU to wlun during its runtime-suspend. >> During the process blk_queue_enter checks if the queue is not in >> suspended state. If so, it waits for the queue to resume, and never >> comes out of it. >> The commit >> (d55d15a33: scsi: block: Do not accept any requests while suspended) >> adds the check if the queue is in suspended state in blk_queue_enter(). >> >> Call trace: >> __switch_to+0x174/0x2c4 >> __schedule+0x478/0x764 >> schedule+0x9c/0xe0 >> blk_queue_enter+0x158/0x228 >> blk_mq_alloc_request+0x40/0xa4 >> blk_get_request+0x2c/0x70 >> __scsi_execute+0x60/0x1c4 >> ufshcd_set_dev_pwr_mode+0x124/0x1e4 >> ufshcd_suspend+0x208/0x83c >> ufshcd_runtime_suspend+0x40/0x154 >> ufshcd_pltfrm_runtime_suspend+0x14/0x20 >> pm_generic_runtime_suspend+0x28/0x3c >> __rpm_callback+0x80/0x2a4 >> rpm_suspend+0x308/0x614 >> rpm_idle+0x158/0x228 >> pm_runtime_work+0x84/0xac >> process_one_work+0x1f0/0x470 >> worker_thread+0x26c/0x4c8 >> kthread+0x13c/0x320 >> ret_from_fork+0x10/0x18 >> >> Fix this by registering ufs device wlun as a scsi driver and >> registering it for block runtime-pm. Also make this as a >> supplier for all other luns. That way, this device wlun >> suspends after all the consumers and resumes after >> hba resumes. >> >> Co-developed-by: Can Guo <cang@codeaurora.org> >> Signed-off-by: Can Guo <cang@codeaurora.org> >> Signed-off-by: Asutosh Das <asutoshd@codeaurora.org> >> --- > >Now we need either to move the suspend/resume vops from >ufshcd_suspend/resume to __ufshcd_wl_suspend/resume, assuming that >would work for existing implementations of those callbacks, >or otherwise create new vops ->wl_suspend() / ->wl_resume(), and >then split the existing implementations of those callbacks. > >ufs_intel_resume() now needs to be invoked from __ufshcd_wl_resume(). >I am not sure about the others: > > exynos_ufs_suspend() > exynos_ufs_resume() > ufs_hisi_suspend() > ufs_hisi_resume() > ufs_mtk_suspend() > ufs_mtk_resume() > ufs_qcom_suspend() > ufs_qcom_resume() >
Thanks. I'll change this in the next version.
-asd
| |